sql >> Databáze >  >> NoSQL >> Redis

Jak nastavit expiraci hash klíče v redis podle existence klíče

Pomocí kanálu toho NEMŮŽETE dosáhnout, protože nikdy nevíte, zda klíč existuje, dokud nebude spuštěn celý kanál. Místo toho můžete k provedení této úlohy použít skriptování 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

Zaškrtněte toto, abyste viděli, jak spustit skript Lua pomocí redis-py. Poté spusťte skript s kanálem, abyste snížili RTT .

AKTUALIZACE

Pokud trváte na používání WATCH k provedení této úlohy můžete vyzkoušet následující kód:

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. Jak hledat hash klíče v redis?

  2. Jak používat řazené seznamy Redis

  3. Node.js &Redis; Čekání na dokončení smyčky

  4. Snižte dobu provádění úloh sidekiq