Jeg går ud fra, at du arbejder på en kø , hvor du indsætter 1000 elementer på et enkelt sted og henter dem flere steder i den rækkefølge, de er indsat i .
Du kan ikke opnå det med en enkelt kommando, men du kan gøre det med 2 kommandoer. Du kan skrive et lua-script for at gøre dem atomare.
Lrange:http://redis.io/commands/lrange
Lrange list -100 -1
Dette vil vise dig de første 100 elementer på listen. her er forskydningen -100. Bemærk, at dette vil returnere varerne i den modsatte rækkefølge, som det er indsat. Så du skal vende sløjfen for at sikre kømekanismen.
Ltrim:http://redis.io/commands/ltrim
ltrim list 0 -101
Dette vil trimme de 1. 100 elementer på listen. her er 101 n+1, så det skal være 101. Her er offset 101
At skrive dem inde i en lua-blok vil sikre dig atomiciteten.
Lad mig give dig et simpelt eksempel.
Du indsætter 100 elementer på et enkelt sted.
lpush list 1 2 3 .. 100
Du har flere klienter, der forsøger at få adgang til denne lua-blok. Sig, at din n-værdi er 5 her. 1stclient kommer ind og får de første 5 elementer indsat.
127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
Du beholder dem i dit lua-objekt og sletter dem.
127.0.0.1:6379> LTRIM list 0 -6
OK
returner dem til din kode, nu er det ønskede resultat 1 2 3 4 5, men det du har er 5 4 3 2 1. Så du skal vende sløjfen og udføre operationen.
Når den næste klient kommer ind, vil den få det næste sæt værdier.
127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
På denne måde kan du nå dit krav. Håber dette hjælper.
EDIT:
Lua script:
local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result