Presumo que você esteja trabalhando em uma fila , onde você insere 1.000 itens em um único local e os recupera em vários locais na ordem em que são inseridos .
Você não pode alcançá-lo com um único comando, mas pode fazê-lo com 2 comandos. Você pode escrever um script lua para torná-los atômicos.
Lrange:http://redis.io/commands/lrange
Lrange list -100 -1
Isso listará os primeiros 100 elementos da lista. aqui o deslocamento é -100. Observe que isso retornará os itens na ordem oposta em que foi inserido. Então você precisa reverter o loop para garantir o mecanismo de fila.
Ltrim:http://redis.io/commands/ltrim
ltrim list 0 -101
Isso cortará os primeiros 100 elementos da lista. aqui 101 é n+1 então deve ser 101. Aqui o deslocamento é 101
Escrevê-los dentro de um bloco lua garantirá a atomicidade.
Deixe-me dar um exemplo simples.
Você insere 100 elementos em um único lugar.
lpush list 1 2 3 .. 100
Você tem vários clientseach tentando acessar este bloco lua. Digamos que seu valor n seja 5 aqui. 1stclient entra e obtém os primeiros 5 elementos inseridos.
127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
Você os mantém em seu objeto lua e os exclui.
127.0.0.1:6379> LTRIM list 0 -6
OK
retorne-os ao seu código, agora o resultado que você quer é 1 2 3 4 5 mas o que você tem é 5 4 3 2 1. Então você precisa reverter o loop e realizar a operação.
Quando o próximo cliente chegar, ele receberá o próximo conjunto de valores.
127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
Desta forma, você pode atingir sua exigência. Espero que isto ajude.
EDITAR:
roteiro Lua:
local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result