繁体   English   中英

Redis-排序字典

[英]Redis - Sorted Dictionary

Redis具有数据结构排序集,可让您创建按某个得分值排序的集。

我正在尝试解决几个问题

  1. 我需要存储相似的成员,但得分不同(套组不可能)。 一种解决方案是将分数与原始值连接起来并将其存储为值,但这有点丑陋。

  2. 每个分数只需要一名成员,而且我需要一种方法来强制实施。

  3. 我需要能够按分数更新或删除成员,例如在字典中。

我要查找的最好的示例是订单簿,我需要能够设置一定价格的数量,删除价格并检索数量以及按价格排序的价格

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中是否有数据结构支持开箱即用的排序字典(可能是模块)?

谢谢。

它可以工作,但我每次必须进行2次读取和2次写入,并且还要确保该写入在事务内。

您还希望在事务中进行读取,除非您不在乎可能的读取一致性问题。

redid中是否有数据结构支持开箱即用的排序字典(可能是模块)?

排序集就是这样,但是您要查找的是一个单一数据结构,该结构是一种带排序的双向字典(尽管仅对键/值的一个子集<-取决于您来自的方向) 。

您将两个现有结构“焊接”在一起的方法是完全有效的,并且已经指出了关于两个键和事务性的约束。 您可以使用Lua脚本来包装逻辑,而不必担心事务,但是您仍然可以通过两个操作让它触摸2个键。

AFAIK没有实现此数据结构的Redis模块ATM(尽管应该可以写一个)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM