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

标签 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"}]}

最佳答案

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

  • 有一个名为 user:1:posts集合(或类似的东西),其中包含完整的 key (user:1:post:1 等)或相关键(1 等)
  • 有一个名为user:1:posts(或类似的东西)的散列,其中包含由其 id 键控的帖子

我很想使用后一种方法,因为它更直接 - 所以我可能会:

  • user:1,内容为 {"Id":"1","Name":"Gholzam","Posts":"[]"}
  • user:1:posts,一个包含 3 对的散列:
    • 1,值为{"PostId":"1","Content":"测试内容"}
    • 2,值为{"PostId":"2","Content":"测试内容"}
    • 3,值为{"PostId":"3","Content":"测试内容"}

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

第二部分是如何在服务器端操作json。这里的好消息是,redis 通过 cjson 提供了对 lua 内部 json 工具的访问。 .

我既不是cjson专家,也不是lua专家;然而,坦率地说,我的建议是:不要这样做。 IMO,如果你让它专注于它擅长的事情:存储和检索,那么 Redis 的效果最好。您可能可以随心所欲地改变它,但我很想在 Redis 之外 进行任何 json 操作。

关于json - 在redis中通过lua脚本编辑json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25309371/

相关文章:

javascript - 为什么 JS 对象会有这样的行为?

math - SVG 矩阵到旋转度数

Redis 不再更新 dump.rdb

windows - 在 Windows 上运行 Redis

android - 为什么 Corona SDK 的场景隐藏事件没有被触发?以及为什么即使我删除了场景,计时器仍在向控制台打印内容?

redis - 无法使用 redis-cli 从 Redis 获取匹配的 key

javascript - 使用表中的 jquery 填充选择选项按钮

java - 如何访问 jsonarray 元素

javascript - 如何用Prototype解析XML字符串?

c - Lua错误没有传递 bool 值