我想将复杂结构存储为 Redis 有序集中的 JSON 对象。
ZADD "mysetkey" 100 [ {"A":"100"}, {"B":"50"}, {"C":"180"}, {"D":"200"} ]
ZADD "mysetkey" 101 [ {"A":"10"}, {"B":"50"}, {"C":"70"}, {"D":"200"} ]
ZADD "mysetkey" 88 [ {"A":"300"}, {"B":"50"}, {"C":"110"}, {"D":"200"} ]
现在是否有一种易于对存储的值执行操作或搜索的方法?
例如,如果我想得到 sumof(A) for all elements
?或者获取所有值为 A < 20 AND value of C > 100
的元素.
我的理解是这是不可能的,因为 Redis 将所有内容都存储为字符串。但无论如何都想确认一下。
此外,通过使用 Redis 支持的数据结构组合,可以在 Redis 中实现这一点。
最佳答案
您可以在 Lua 脚本中实现所需的功能。在评估 Lua 脚本时,Redis 会加载 cjson
库,该库允许您解析 JSON 以从中提取值。请参阅 EVAL
命令。 http://redis.io/commands/eval
来自 http://www.kyne.com.au/~mark/software/lua-cjson-manual.html 的代码示例:
json_text = '[ true, { "foo": "bar" } ]'
value = cjson.decode(json_text)
-- Returns: { true, { foo = "bar" } }
请注意,Redis 一次评估一个脚本,并且在脚本运行时没有其他客户端可以运行它们的命令,因此现在这可能适合您。
关于database-design - Redis存储和查询复杂结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257050/