Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да настроите срока на валидност на хеш ключа в redis според съществуването на ключа

НЕ МОЖЕТЕ да постигнете това с конвейер, тъй като никога не знаете дали ключът съществува, докато не бъде изпълнен целият конвейер. Вместо това можете да използвате Lua скриптове, за да свършите работата:

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

Проверете това, за да видите как да стартирате Lua скрипт с redis-py. След това стартирайте скрипта с конвейер, за да намалите RTT .

АКТУАЛИЗИРАНЕ

Ако настоявате да използвате WATCH за да свършите работата, можете да опитате следния код:

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. Redis при отказ със StackExchange / Sentinel от C#

  2. Препълване на стека, Redis и обезсилване на кеша

  3. Redis срещу Memcached – Сравнение 2021

  4. Списъци на Redis

  5. Django - Как да използвам асинхронна опашка от задачи с целина и redis