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

Apakah perintah redis incr dapat dibatasi untuk nomor tertentu?

Anda dapat menggunakan skrip Lua kecil untuk melakukan peningkatan di dalam Redis itu sendiri sehingga pada dasarnya adalah single-threaded:

127.0.0.1:6379> set CappedInt 7
OK
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 8
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 9
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 10
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 10

Daripada mengetikkan skrip, Anda juga dapat memasukkan kode Lua ke dalam file bernama IncWithCap.lua seperti ini:

local cap=10
if(redis.call(ARGV[1],KEYS[1])+0 < cap) then
   return redis.call('INCR',KEYS[1])
end
return cap

Kemudian Anda dapat memuatnya ke Redis dengan:

redis-cli SCRIPT LOAD "$(cat IncWithCap.lua)"

Contoh Keluaran

"6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"

Kemudian Anda dapat memanggil/mengeksekusinya dengan:

127.0.0.1:6379> evalsha 6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1 1 CappedInt get



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bisakah redis menonaktifkan balasan untuk perintah pipelined?

  2. Klien AWS Lambda dan Redis. Mengapa saya tidak bisa menelepon balik?

  3. apakah ada cara untuk mendapatkan IP klien di redis?

  4. Penyimpanan NFS Kubernetes menggunakan PV dan PVC

  5. Flask:menyebarkan pekerjaan pekerja latar belakang (rq, redis)