
我假设您正在一个 队列中 ,在此 队列中 ,您可以在一个位置插入1000个项目,然后 按插入顺序在 多个位置检索它们。
您无法通过单个命令来实现,但是可以通过2个命令来实现。您可以编写一个lua脚本使它们原子化。
兰奇:http:
//redis.io/commands/lrange
Lrange list -100 -1
这将在列表中列出您的前100个元素。这里的偏移量是-100。请注意,这将以插入时的相反顺序返回项目。因此,您需要反转循环以确保队列机制。
Ltrim:http:
//redis.io/commands/ltrim
ltrim list 0 -101
这将修剪列表中的前100个元素。这里101是n + 1,所以它必须是101。这里offset是101
将它们写在lua块中将确保您的原子性。
让我举一个简单的例子。
您在一个地方插入100个元素。
lpush list 1 2 3 .. 100
您有多个客户端,每个客户端都试图访问此lua块。假设您的n值为5。第一个客户端进入并获取插入的前5个元素。
127.0.0.1:6379> lrange list -5 -11) "5"2) "4"3) "3"4) "2"5) "1"
您将它们保留在lua对象中并删除它们。
127.0.0.1:6379> LTRIM list 0 -6OK
将它们返回到您的代码,现在您想要的结果是1 2 3 4 5,但是您得到的是5 4 3 21。因此,您需要反转循环并执行 *** 作。
当下一个客户端进入时,它将获得下一组值。
127.0.0.1:6379> lrange list -5 -11) "10"2) "9"3) "8"4) "7"5) "6"
这样您就可以实现您的要求。希望这可以帮助。
编辑:
Lua脚本:
local result = redis.call('lrange', 'list','-5','-1')redis.call('ltrim','list','0','-6')return result欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)