Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak ustawić wygaśnięcie klucza skrótu w redis zgodnie z istnieniem klucza?

NIE MOŻESZ tego osiągnąć za pomocą potoku, ponieważ nigdy nie wiadomo, czy klucz istnieje, dopóki cały potok nie zostanie wykonany. Zamiast tego możesz użyć skryptów Lua do wykonania zadania:

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

Sprawdź to, aby zobaczyć, jak uruchomić skrypt Lua z redis-py. Następnie uruchom skrypt z potoku, aby zmniejszyć RTT .

AKTUALIZUJ

Jeśli nalegasz na używanie WATCH aby wykonać zadanie, możesz wypróbować następujący kod:

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. Jak zdobyć wszystkie klucze z Redis za pomocą szablonu redis

  2. Pamięć masowa Kubernetes NFS przy użyciu PV i PVC

  3. Jak mogę używać redisa z Django?

  4. Nadzorowany przez Django Celery Elastic Beanstalk brak takiego błędu procesu

  5. kabel akcji subskrybowany lokalnie, ale nie na heroku