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

Cách đặt thời hạn khóa băm trong redis theo sự tồn tại của khóa

Bạn KHÔNG THỂ đạt được điều đó với đường ống, vì bạn không bao giờ biết liệu khóa có tồn tại hay không cho đến khi toàn bộ đường dẫn được thực thi. Thay vào đó, bạn có thể sử dụng Lua scripting để thực hiện công việc:

local key = KEYS[1]
local field = ARGV[1]
local value = ARGV[2]
local ttl = ARGV[3]

local exist = redis.call('exists', key)

redis.call('hset', key, field, value)

if exist == 0 then
    redis.call('expire', key, ttl)
end

Kiểm tra phần này để biết cách chạy tập lệnh Lua với redis-py. Sau đó, chạy tập lệnh với đường dẫn để giảm RTT .

CẬP NHẬT

Nếu bạn khăng khăng sử dụng WATCH để thực hiện công việc, bạn có thể thử mã sau:

with r.pipeline() as pipe:
    while 1:
        try:
            pipe.watch(hkey)

            exist = pipe.exists(hkey)

            pipe.multi()

            if not exist:
                pipe.hset(hkey, v, v)
                pipe.expire(hkey, 3600)
            else:
                pipe.hset(hkey, v, v)

            pipe.execute()
            break;
        except WatchError:
            continue



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm lại các thông báo về keyspace với StackExchange.Redis

  2. Tạo chức năng xem mà không trả lại phản hồi trong Flask

  3. Trả lại danh sách hgetall từ redis trong nodejs

  4. ConnectionMultiplexer xử lý như thế nào khi ngắt kết nối?

  5. cách định cấu hình ttl khác nhau cho từng bộ đệm redis khi sử dụng @cacheable trong springboot2.0