sorting - 将部分散列集副本存储在有序集中的删除安全方法

标签 sorting data-structures redis hashset sortedset

我已经阅读了 Redis 文档和所有内容,但无法理解这个用例。

我有以下数据结构

=> title

=> content

=> date

=> score

=> id

并且只需要将 titledate 存储在一个排序集中,我在每次创建主要帖子时都会这样做。

问题在于我也必须删除排序集上的内容,因为如果我这样做了

zadd 10 [title, date] 其中 10score,如果还有另一篇文章,我想删除它score 10 两者都会被删除,这不是我想要的功能,显然是这样。

我考虑过将帖子 id 添加到分数之前,例如 6+10 => 610 但它会搞砸设置订购并弄得一团糟。附加它更加麻烦,不可维护,更不用说非常低效了。

最后一点,我使用排序集是因为我存储了 360.000.000 多个项目,而当我必须访问中间的项目时,其他集将失败。

我该如何解决这个问题(删除安全地存储排序集中的部分哈希集副本)?

最佳答案

您可以使用 lua 脚本。由于redis是单线程的,lua执行时,不会并发执行其他查询(悲观锁)。

在您的 lua 脚本(EVAL 命令)中,您将元素存储在您想要添加的分数处(在您使用 ZRANGEBYSCORE 的示例中为 10)。使用 ZREMRANGEBYSCORE 从 redis 中删除该分数的所有元素。在redis中用ZADD把lua中存储的元素加回来。

您使用 lua 运行时作为您处理的内存缓冲区。它应该工作得很好,因为它是事务性的。

关于sorting - 将部分散列集副本存储在有序集中的删除安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25500094/

相关文章:

c++ - 用于随机访问和循环元素的最佳数据结构(C++)

c# - 使用 StackExchange.Redis 并行执行?

python - Django NoArgsCommand 给出 NameError : name ' ' is not defined

c++ - 使用 C++ 库根据键对对象进行排序的最快方法是什么?

PHP 使用 ORDER BY 查询 MySQL 对数据库项目进行排序

python - Python 的数据结构

redis 快照位置与配置中指定的不一致

algorithm - 合并大小为 n 的 k 个排序数组的下界

r - 有没有一种简单的方法可以使用两个标准(第二个标准是关系)对 R 中的值进行排名?

java - 这里是否有不使用 getter 和 setter 的情况?