我想在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将所有内容存储为String。但无论如何都想确认一下。
此外,可以通过使用Redis支持的数据结构组合在Redis中实现此目的。
答案 0 :(得分:2)
您可以在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一次评估一个脚本,并且在脚本运行时没有其他客户端可以运行它们的命令,因此现在可能适合您。