Redis 具有数据结构排序集,它允许您创建一个按某个分数值排序的集。
我正在努力解决几个问题
我需要存储相似但分数不同的成员(集合不可能)。一种解决方案是将分数与原始值连接起来并将其存储为值,但这有点难看。
我需要每个分数只有一个成员,我需要一种方法来执行它。
我需要能够按分数更新或删除成员,就像在字典中一样。
我正在寻找的最好的例子是订单簿 我需要能够设置特定价格的数量、删除价格并检索按价格排序的数量和价格
SET orderBook_buy 1.17 30000
SET orderBook_buy 1.18 40000
SET orderBook_buy 1.19 40000
SET orderBook_buy 1.17 35000 // Override the previous value of 1.17
DEL orderBook_buy 1.18 // 1.18 was sold out
我认为如果我结合排序集和哈希表就可以做到
我将价格保存在有序集合中
ZADD orderBook_buy_prices 1.17 1.17
...
ZREM orderBook_buy_prices 1.18
以及哈希表中的金额,按价格
HSET orderBook_buy 1.17 35000
...
HDEL orderBook_buy 1.17
它可以工作,但我每次都必须执行 2 次读取和 2 次写入,并且还要确保写入在事务内。
redid 中是否有支持开箱即用的排序字典的数据结构(可能是一个模块)?
谢谢。
最佳答案
It could work but i have to do 2 reads and 2 writes every time, and also make sure that the writes are inside a transaction.
您还想在事务中进行读取,除非您不关心可能的读取一致性问题。
Is there a data structure in redid that support sorted dictionaries out of the box (Could be a module)?
Sorted Sets 就是这样,但您正在寻找的是一种单一的数据结构,它是一种带有排序的双向字典(尽管仅在键/值的一个子集上<-取决于您的方向来自)。
您将两个现有结构“焊接”在一起的方法是完全有效的,您指出了有关两个键和事务性的限制。您可以使用 Lua 脚本来包装逻辑而不用担心事务,但您仍然需要通过两个操作让它触摸 2 个键。
据我所知,没有实现此数据结构的 Redis 模块 ATM(尽管应该可以编写一个)。
关于data-structures - Redis - 排序字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931573/