删除在已排序集中存储部分哈希集副本的安全方法

时间:2014-08-26 07:16:03

标签: 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+个项目,而当我必须访问中间项目时,其他集合将失败。

如何解决此问题(删除安全存储部分哈希集副本在有序集合中)?

1 个答案:

答案 0 :(得分:0)

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

在你的lua脚本(EVAL命令)中,将元素存储在你想要添加的分数上(在你的例子中有10个ZRANGEBYSCORE)。使用ZREMRANGEBYSCORE从redis中删除此分数的所有元素。用redis中的ZADD添加lua中存储的元素。

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