sql >> Databasteknik >  >> NoSQL >> Redis

Hur man ställer in hash-nyckelns utgång i redis enligt nyckelns existens

Du KAN INTE uppnå det med pipeline, eftersom du aldrig vet om nyckeln finns förrän hela pipelinen har exekveras. Istället kan du använda Lua-skript för att göra jobbet:

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

Kontrollera detta för att se hur du kör Lua-skript med redis-py. Kör sedan skriptet med pipeline för att minska RTT .

UPPDATERA

Om du insisterar på att använda WATCH för att göra jobbet kan du prova följande 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. En översikt över databasdriftsrapportering i ClusterControl

  2. ScaleGrid tillkännager MongoDB Hosting Services i Kanada

  3. Buffrad dataanvändning för överflödessorteringssteg överskrider den interna gränsen

  4. Hadoop-räknare och typer av räknare i MapReduce