【发布时间】:2015-10-10 09:48:37
【问题描述】:
我有一个redis列表
a, b, c ,d ,e ,f g, h
在我对函数的回调中,我得到了元素的索引,我想删除该索引。
LPOP 和 RPOP 不适合我。如何根据索引而不是redis中的值删除元素?
谢谢
【问题讨论】:
标签: redis
我有一个redis列表
a, b, c ,d ,e ,f g, h
在我对函数的回调中,我得到了元素的索引,我想删除该索引。
LPOP 和 RPOP 不适合我。如何根据索引而不是redis中的值删除元素?
谢谢
【问题讨论】:
标签: redis
Redis 列表只是一个双链表,它不应该这样做。有一个关于这个here的讨论: “列表中的元素不能被索引指向,因为列表更改时索引会失效。”
如果需要按索引删除,并且元素是唯一的,可以使用 LINDEX + LREM 来完成。
假设要删除索引 3:
> LINDEX list 3
"d"
> LREM list 1 d
1
另一个不错的解决方案应该是使用特殊字符串来标记已删除的条目,然后运行 LREM:
> LSET list 2 DELETE
OK
> LSET list 4 DELETE
OK
> LREM list 0 DELETE
2
【讨论】: