database-design - Redis存储和查询复杂结构

标签 database-design redis

我想将复杂结构存储为 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/

相关文章:

node.js - Python RQ(Redis 队列)- 有 NodeJS 兼容版本吗?

azure - 具有 Azure SQL 数据库的分布式锁管理器

mysql - 使用 UNIQUE 索引好吗?

sql-server - TFS2010 数据库架构解释

mysql - 在 mysql 表中存储无序对的有效方法

node.js - 使用(socket.io + RedisStore)跨多个服务器进行通信

django - Django 的多个永久连接?

database-design - 在数据库中存储类别和产品类型的最佳方式

mysql - 我可以有几个 'similar' 数据库表来减少检索时间吗

c# - 使用 StackExchange.Redis 从 Redis 获取多个哈希值