Database design Redis存储和查询复杂结构

Database design Redis存储和查询复杂结构,database-design,redis,Database Design,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"}

我想将一个复杂的结构作为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)
?或者获取值为
A<20且值为C>100的所有元素

我的理解是这是不可能的,因为Redis将所有内容都存储为字符串。但我还是想确认一下


此外,通过使用Redis支持的数据结构组合,也可以在Redis中实现这一点

您可以在Lua脚本中实现所需的功能。在评估Lua脚本时,Redis会加载
cjson
库以及其他库,该库允许您解析JSON以从中提取值。请参阅
EVAL
命令

代码示例来自:

请注意,Redis一次对一个脚本求值,并且在脚本运行时没有其他客户端可以运行它们的命令,因此这可能适合您

json_text = '[ true, { "foo": "bar" } ]'
value = cjson.decode(json_text)
-- Returns: { true, { foo = "bar" } }