繁体   English   中英

在Redis中设置Lua表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM