2013-06-23 87 views
3

我想将复杂结构存储为Redis排序集中的JSON对象。Redis存储和查询复杂结构

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中实现此目标。

回答

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的评估脚本,一次一个,并没有其他客户可以在脚本运行时运行他们的命令,所以这个现在可能是适合你。