在 Redis 中设置 Lua 表格。

我有一个 Lua 脚本,大致如下:

local item = {};
local id = redis.call("INCR", "counter");
item["id"] = id;
item["data"] = KEYS[1]
redis.call("SET", "item:" .. id, cjson.encode(item));
return cjson.encode(item);

KEYS[1] 是一个字符串化的 JSON 对象:

JSON.stringify({name : 'some name'});

问题是,因为我在将项目添加到集合中使用了 cjson.encode,它似乎被字符串化了两次,结果是:

{"id":20,"data":"{\"name\":\"some name\"}"}

有更好的方法处理吗?

点赞
用户3160475
用户3160475

首先,无论你的问题是什么,你都没有正确使用 KEYS,而且你的脚本也没有按照指南进行编写。你不应该在脚本中生成键名(即使用 "item:" .. id 作为键名调用 SET),而应该使用 KEYS 输入数组事先声明涉及的任何键。

其次,不要使用带有 KEYS 的字符串化字符串,而是使用 ARGV 输入数组。

第三,你可以使用 item["data"] = json.decode(ARGV[1]) 避免双重编码。

最后,也许你应该了解一下 Redis 的哈希数据类型 - 它可能更适合你的需求。

2015-08-24 15:06:28