我已经阅读过Redis文档和所有内容,但无法解决这个用例。
我有以下数据结构
=> title
=> content
=> date
=> score
=> id
并且只需将title
和date
存储在我在每个主要帖子创建时执行的有序集合中。
问题在于我必须在排序集上删除该内容,因为如果我这样做
zadd 10 [title, date]
其中10
是score
,如果有score
10
的其他帖子,我想删除它,两者都会被删除,这不是我想要的功能,显然是这样。
我已考虑将帖子id
添加到6+10
=>之类的分数中。 610
但它会搞砸定制顺序并造成巨大的混乱。附加它更加繁琐,不能说非常低效。
作为最后一点,我使用的是排序集,因为我存储了360.000.000+个项目,而当我必须访问中间项目时,其他集合将失败。
如何解决此问题(删除安全存储部分哈希集副本在有序集合中)?
答案 0 :(得分:0)
您可以使用lua脚本。由于redis是单线程的,当执行lua时,不会同时执行任何其他查询(悲观锁定)。
在你的lua脚本(EVAL命令)中,将元素存储在你想要添加的分数上(在你的例子中有10个ZRANGEBYSCORE)。使用ZREMRANGEBYSCORE从redis中删除此分数的所有元素。用redis中的ZADD添加lua中存储的元素。
您使用lua运行时作为治疗的内存缓冲区。它应该工作得非常好,因为它是事务性的。