我想在从 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":"测试内容"}
- 键
然后您可以使用hgetall
或hvals
轻松获取帖子。
第二部分是如何在服务器端操作json。这里的好消息是,redis 通过 cjson
提供了对 lua 内部 json 工具的访问。 .
我既不是cjson
专家,也不是lua专家;然而,坦率地说,我的建议是:不要这样做。 IMO,如果你让它专注于它擅长的事情:存储和检索,那么 Redis 的效果最好。您可能可以随心所欲地改变它,但我很想在 Redis 之外 进行任何 json 操作。
关于json - 在redis中通过lua脚本编辑json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25309371/