data-structures - Redis - 排序字典

标签 data-structures redis

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

谢谢。

最佳答案

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/

相关文章:

mysql - 使用 Nginx 代理 TCP 流(MySQL 和 Redis)

scripting - 你能在redis中查看一个lua脚本吗?

node.js - redis-store如何将房间数据存储到redis中?

lua - 在redis中加载lua脚本文件

c++ - array, std::list, std::vector 插入时间

data-structures - Julia 有像结构一样的 HashMap 吗?

algorithm - 为应用程序学习和应用算法

python - 我们可以使用映射来搜索而不是二分搜索吗?

c - 索引树的最佳方法

使用 SSL 时 Azure Redis 连接失败