我想在从Redis服务器返回之前编辑我的json对象, 在我的Redis服务器中,我有4个键:
user:1 {"Id":"1","Name":"Gholzam","Posts":"[]"}
user:1:post:1 {"PostId":"1","Content":"Test content"}
user:1:post:2 {"PostId":"2","Content":"Test content"}
user:1:post:3 {"PostId":"3","Content":"Test content"}
我想通过lua脚本获取此上下文,如何? :
{"Id":"1","Name":"Gholzam","Posts":"[{"PostId":"1","Content":"Test
content"},{"PostId":"1","Content":"Test
content"},{"PostId":"1","Content":"Test content"}]}
答案 0 :(得分:1)
这里客户的选择基本上无关紧要;重要的是:弄清楚数据存储。你说你有4把钥匙 - 但是对于我来说,我们知道的是user:1
,我们知道这些帖子是什么。常见的方法包括:
user:1:posts
(或类似内容)的 set ,其中包含完整键(user:1:post:1
等)或相对键(1
,等)user:1:posts
(或类似内容)的哈希,其中包含按其ID标识的帖子我很想使用后一种方法,因为它更直接 - 所以我可能会:
user:1
,内容为{"Id":"1","Name":"Gholzam","Posts":"[]"}
user:1:posts
,3对哈希:
1
,其值为{"PostId":"1","Content":"Test content"}
2
,其值为{"PostId":"2","Content":"Test content"}
3
,其值为{"PostId":"3","Content":"Test content"}
然后,您可以使用hgetall
或hvals
轻松获取帖子。
第二部分是如何在服务器上操作json。这里的好消息是redis可以通过cjson
访问lua里面的json工具。
我既不是cjson
也不是lua的专家;但是,坦率地说,我的建议是:不要这样做。如果你让它专注于它的优点,那就是IMO,redis效果最好:存储和检索。你可能可以将它弯曲到你的心血来潮,但我很想做任何json操作在之外的redis。