Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Redis item daftar Pop Dengan jumlah item

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Memeriksa apakah suatu nilai sudah ada dalam daftar Redis

  2. Bagaimana cara mencari di redis untuk kunci hash?

  3. Untuk loop dalam redis dengan permintaan asinkron nodejs

  4. Redis SYNC dan EXEC

  5. Bagaimana cara memindahkan database redis dari satu server ke server lain?