如何在Redis列表上执行lrange +(从列表中删除lrange的结果)

时间:2016-09-27 05:58:57

标签: caching redis

我知道rpop删除了Redis列表的最后一个元素。如何在某个范围之间弹出列表项(例如:0到100)?

我希望这是lrange + rpop的组合。

5 个答案:

答案 0 :(得分:3)

删除第一个顶部 100元素,应该是:

  

lrange list 0 99   
    ltrim list 100 -1

删除尾部 100元素,应该是:

  

lrange list -1 -100   
    ltrim list 0 -99

ltrim descripton

修剪列表name,删除不在切片内的所有值         在startend之间 startend可以是负数         Python切片表示法

  

在python脚本和redis命令行中的上述工作,应该适用于其他语言的情况。

答案 1 :(得分:1)

据我所知,没有预定义命令从列表中弹出一系列项目。 您必须向redis发送一系列rpop命令。 Redis常常发送许多短命令,因此连续发送100(甚至1000)个rpop命令不是问题。 为了提高性能,您可以使用"流水线"在一次操作中发送多个命令。这样做的确切方式取决于您的驾驶员。

另一种方法是编写Lua脚本并使用eval

发送它

答案 2 :(得分:0)

您需要结合使用 lrange ltrim 来实现此目的。

http://redis.io/commands/ltrim

检索并删除列表中的前100个元素。

lrange list 0 100
ltrim list 0 100

答案 3 :(得分:0)

删除前100个元素,应该是:

列表0 99 列表100 -1

删除尾部前100个元素,应为:

列表-100 -1 ltrim列表0 -101

答案 4 :(得分:0)

聚会晚了一点,但是如果您想自动完成所有事情,则可以使用multi / exec命令。

读取和删除两个元素的示例。

  1. 为了示例,准备一些虚拟数据:
127.0.0.1:6379> rpush mylist 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
  1. 开始交易冻​​结
127.0.0.1:6379> multi
OK
  1. 排队所需的命令(阅读前两个元素并将其删除)。
127.0.0.1:6379> lrange mylist 0 1
QUEUED
127.0.0.1:6379> ltrim mylist 2 -1
QUEUED
  1. 执行命令
127.0.0.1:6379> exec
1) 1) "1"
   2) "2"
2) OK
  1. 验证一切顺利。再次,只是为了举例。
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "4"