Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Lệnh redis incr có thể bị giới hạn số lượng cụ thể không?

Bạn có thể sử dụng một tập lệnh Lua nhỏ để thực hiện gia tăng trong chính Redis để về cơ bản nó là một luồng:

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

Thay vì nhập tập lệnh, bạn cũng có thể đặt mã Lua vào một tệp có tên là IncWithCap.lua như thế này:

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

Sau đó, bạn có thể tải nó vào Redis bằng:

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

Đầu ra mẫu

"6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"

Sau đó, bạn có thể gọi / thực thi nó bằng:

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. Làm cách nào để bật TLS cho Redis 6 trên Sidekiq?

  2. nodejs, redis. kiểm tra xem các khóa có tồn tại hay không và tạo mới nếu không

  3. Triển khai Pub / sub trong nodeJS

  4. Giới thiệu về tiền tố char b trong ứng dụng khách Python3.4.1 kết nối với redis

  5. Làm thế nào danh sách Redis có thể được sử dụng để triển khai hệ thống trò chuyện?