Redis的List命令里没有根据index删除元素的命令,但有的时候业务会需要这个功能。
先上命令:
LSET ListKey index "__deleted__"
LREM ListKey 0 "__deleted__"也可以用事务管道合并成一次请求
MULTI
LSET ListKey index "__deleted__"
LREM ListKey 0 "__deleted__"
EXEC
这个解决方案是参考了Gooogle Group里几个老外的思路,即:
先用LSET命令将要删除的索引值置为一个特殊的删除标识,再利用LREM命令将有删除标识的元素删除掉。
另外相关讨论显示,redis之所以没有直接内置这个命令,是因为无法以安全的原子操作来实现它。
因为没有看过redis的源码实现,不知道此说法是否正确,但是既然可以删除多项的LREM命令可以实现,为什么基于索引删除一项就不能实现呢?若不是删除操作的关系,那就只有索引操作的问题了,但同样基于索引的LSET命令又如何解释?
请大神指点
本文介绍了一种在Redis中通过List的index删除特定元素的方法。由于Redis未直接提供该功能,文章提出了一种结合使用LSET和LREM命令的方案,并通过事务管道提高效率。
6028

被折叠的 条评论
为什么被折叠?



