从redis列表中删除特定索引处的元素

时间:2015-07-23 07:13:53

标签: ruby redis

是否可以删除redis列表中特定索引处的元素?没找到我想要的东西。有一个修剪,允许您选择一组特定的元素,LREM允许您按值删除列表中的项目,但我没有值。

我找到了一个hack,您可以使用LSET将元素的值更改为UID或字符串,例如'删除',你在这个值上调用LREM。这只是感觉有点脏。

2 个答案:

答案 0 :(得分:8)

因此,实现我想要的唯一方法是将索引处的值设置为预先确定的字符串,然后按值进行删除。

在此处查看讨论https://groups.google.com/forum/#!topic/redis-db/c-IpJ0YWa9I

在红宝石中如下

@redis.lset("#{@namespace}/#{specified_queue}", index, "DELETED")
@redis.lrem("#{@namespace}/#{specified_queue}", 1, "DELETED")

LSET docs http://redis.io/commands/lset LREM docs http://redis.io/commands/lrem

答案 1 :(得分:2)

我能够使用redis-cli找到基于索引的解决方案。

INDEX=<index (starts at 0)>
redis-cli -h <host> -p <port> LREM <list name> 1 "$(redis-cli -h <host> -p <port> LINDEX <list name> $INDEX)"

LINDEX找到索引的值,然后LREM使用该值并从列表中删除它。

我在这里处理的是独特的价值观。这只会删除找到的第一个项目。