【问题标题】:Edit json object by lua script in redis在redis中通过lua脚本编辑json对象
【发布时间】:2014-10-08 04:23:20
【问题描述】:

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

【问题讨论】:

    标签: json lua redis


    【解决方案1】:

    这里客户的选择在很大程度上是无关紧要的;要做的重要事情是:弄清楚数据存储。你说你有 4 把钥匙——但对我来说,我们不知道我们是如何知道的,给定user:1,这些帖子是什么。常见的方法包括:

    • 有一个名为user:1:posts(或类似名称)的set,其中包含完整键(user:1:post:1 等)或相关键(1 等)
    • 有一个名为user:1:posts(或类似名称)的hash,其中包含以他们的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 效果最好:存储和检索。您可能可以随心所欲地改变它,但我很想在 redis 外部进行任何 json 操作。

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 2017-11-25
      • 2018-08-05
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多