Presumo che tu stia lavorando su una coda , dove inserisci 1000 articoli in un unico posto e li recuperi in più punti nell'ordine in cui è stato inserito .
Non puoi ottenerlo con un solo comando ma puoi farlo con 2 comandi. Puoi scrivere uno script lua per renderli atomici.
Lrange:http://redis.io/commands/lrange
Lrange list -100 -1
Questo ti elencherà i primi 100 elementi nell'elenco. qui l'offset è -100. Notare che questo restituirà gli elementi nell'ordine opposto in cui è stato inserito. Quindi è necessario invertire il ciclo per garantire il meccanismo della coda.
Ltrim:http://redis.io/commands/ltrim
ltrim list 0 -101
Questo taglierà i primi 100 elementi nell'elenco. qui 101 è n+1 quindi deve essere 101. Qui offset è 101
Scriverli all'interno di un blocco lua ti garantirà l'atomicità.
Ti faccio un semplice esempio.
Inserisci 100 elementi in un unico posto.
lpush list 1 2 3 .. 100
Hai più client ciascuno che tenta di accedere a questo blocco lua. Supponiamo che il tuo valore n sia 5 qui. 1stclient entra e ottiene i primi 5 elementi inseriti.
127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
Li tieni nel tuo oggetto lua e li elimini.
127.0.0.1:6379> LTRIM list 0 -6
OK
riportali al tuo codice, ora il risultato che vuoi è 1 2 3 4 5 ma quello che hai è 5 4 3 2 1. Quindi devi invertire il ciclo ed eseguire l'operazione.
Quando il prossimo client arriverà, riceverà il prossimo set di valori.
127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
In questo modo puoi soddisfare la tua esigenza. Spero questo sia di aiuto.
MODIFICA:
Scritto Lua:
local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result