Saya berasumsi bahwa Anda sedang mengerjakan antrian , tempat Anda memasukkan 1000 item di satu tempat dan mengambilnya di beberapa tempat sesuai urutan penyisipannya .
Anda tidak dapat mencapainya dengan satu perintah tetapi Anda dapat melakukannya dengan 2 perintah. Anda dapat menulis skrip lua untuk membuatnya menjadi atomik.
Lrange :http://redis.io/commands/lrange
Lrange list -100 -1
Ini akan mencantumkan Anda 100 elemen pertama dalam daftar. di sini offsetnya adalah -100. Perhatikan bahwa ini akan mengembalikan item dalam urutan yang berlawanan saat dimasukkan. Jadi, Anda perlu membalik loop untuk memastikan mekanisme antrian.
Ltrim :http://redis.io/commands/ltrim
ltrim list 0 -101
Ini akan memangkas 100 elemen pertama dalam daftar. di sini 101 adalah n+1 jadi pasti 101. Di sini offset adalah 101
Menuliskannya di dalam blok lua akan memastikan atomitas Anda.
Biarkan saya memberi Anda contoh sederhana.
Anda memasukkan 100 elemen di satu tempat.
lpush list 1 2 3 .. 100
Anda memiliki banyak klien yang masing-masing mencoba mengakses blok lua ini. Katakanlah nilai n Anda adalah 5 di sini. Klien pertama masuk dan memasukkan 5 elemen pertama.
127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
Anda menyimpannya di objek lua Anda dan menghapusnya.
127.0.0.1:6379> LTRIM list 0 -6
OK
kembalikan ke kode Anda, sekarang hasil yang Anda inginkan adalah 1 2 3 4 5 tetapi yang Anda dapatkan adalah 5 4 3 2 1. Jadi, Anda perlu membalikkan loop dan melakukan operasi.
Saat klien berikutnya masuk, ia akan mendapatkan kumpulan nilai berikutnya.
127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
Dengan cara ini Anda dapat mencapai kebutuhan Anda. Semoga ini membantu.
EDIT:
Skrip Lua:
local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result