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

Cara mengatur kedaluwarsa kunci hash di redis sesuai dengan keberadaan kunci

Anda TIDAK BISA mencapainya dengan pipa, karena Anda tidak pernah tahu apakah kuncinya ada sampai seluruh pipa telah dieksekusi. Sebagai gantinya, Anda dapat menggunakan skrip Lua untuk melakukan pekerjaan:

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

Periksa ini untuk melihat bagaimana menjalankan skrip Lua dengan redis-py. Kemudian jalankan skrip dengan pipeline untuk mengurangi RTT .

PERBARUI

Jika Anda bersikeras menggunakan WATCH untuk melakukan pekerjaan itu, Anda dapat mencoba kode berikut:

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. Opsi pencocokan perintah pemindaian redis tidak berfungsi dengan Python

  2. NodeJs - Menggunakan redis, connect-redis dengan express

  3. Laravel Echo Server, Redis, Socket.IO:Sepertinya tidak bisa membuatnya bekerja

  4. SignalR tidak dapat terhubung ke Azure Redis di SSL

  5. Redis tidak dapat terhubung dalam beban sibuk