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

Pre*_*rem 5 caching redis

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

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

Luc*_*ack 5

删除前100个元素,应为:

列表0 99
列表100 -1

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

lrange列表-1 -100
ltrim列表0 -99

ltrim描述

修剪列表name,删除不在start和之间的切片中的所有值end
start并且end可以是负数就像Python的切片符号

以上工作在python脚本和redis命令行中,应在其他语言情况下工作。


Kar*_*all 2

您需要结合lrangeltrim来实现此目的。

http://redis.io/commands/ltrim

编辑: 根据评论中的建议,正确答案是

lrange list 0 99
ltrim list 100 -1
Run Code Online (Sandbox Code Playgroud)

  • 这在几个层面上都是不正确的。首先要获取您想要执行的前 100 个项目“LRANGE list 0 99”,然后 LTRIM 会执行与您所说相反的操作,它会保留前 100 个项目并删除其他所有内容。如果您想删除前 100 个项目,则需要执行“LTRIM list 100 -1”(即保留以项目 100 开头的所有内容)但更重要的是,这是非常不安全的,因为此操作不是原子操作,因此列表可能会更改在第一个和第二个语句之间 - 您需要弄清楚如何使其原子化 (7认同)