sql >> Database >  >> NoSQL >> Redis

Hoe de vervaldatum van de hash-sleutel in redis in te stellen op basis van het bestaan ​​van de sleutel

Dat bereik je NIET met een pijplijn, omdat je pas weet of de sleutel bestaat als de hele pijplijn is uitgevoerd. In plaats daarvan kun je Lua-scripting gebruiken om het werk te doen:

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

Vink dit aan om te zien hoe u het Lua-script uitvoert met redis-py. Voer vervolgens het script met pijplijn uit om de RTT . te verminderen .

UPDATE

Als u erop staat WATCH te gebruiken om het werk te doen, kunt u de volgende code proberen:

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. Inleiding tot MongoDB-gegevenstypen

  2. Spring data Match en filter geneste array

  3. Waarom worden gegevens opgeslagen met rare sleutels in Redis bij gebruik van Jedis met Spring Data?

  4. MongoDB:Server heeft opstartwaarschuwingen