在redis中通过lua脚本编辑json对象

时间:2014-08-14 13:34:39

标签: json lua redis

我想在从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"}]}

1 个答案:

答案 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"}

然后,您可以使用hgetallhvals轻松获取帖子。

第二部分是如何在服务器上操作json。这里的好消息是redis可以通过cjson访问lua里面的json工具。

我既不是cjson也不是lua的专家;但是,坦率地说,我的建议是:不要这样做。如果你让它专注于它的优点,那就是IMO,redis效果最好:存储和检索。你可能可以将它弯曲到你的心血来潮,但我很想做任何json操作之外的redis。