[英]Setting lua table in redis
我有一个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\\"}"}
有更好的方法来处理此问题吗?
首先,无论您的问题是什么,您使用的方式都是错误的KEYS
,并且您的脚本未按照准则编写。 你不应该生成脚本的键名(即调用SET
与"item:" .. id
作为键名),而是使用KEYS
输入数组声明任何按键参与先验。
其次,不要使用ARGV
输入数组来传递带有KEYS
的字符串。
第三,您可以执行item["data"] = json.decode(ARGV[1])
以避免双重编码。
最后,也许您应该了解Redis的Hash数据类型-可能更适合您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.