sql >> Database teknologi >  >> NoSQL >> Redis

Sådan indstilles hash-nøgleudløb i redis i henhold til eksistensen af ​​nøglen

Det KAN du IKKE opnå med pipeline, da du aldrig ved, om nøglen eksisterer, før hele pipelinen er blevet eksekveret. I stedet kan du bruge Lua scripting til at udføre 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

Tjek dette for at se, hvordan du kører Lua-script med redis-py. Kør derefter scriptet med pipeline for at reducere RTT .

OPDATERING

Hvis du insisterer på at bruge WATCH for at udføre jobbet, kan du prøve følgende kode:

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. MapReduce ser ud til at være begrænset til 100?

  2. hvordan man mongoimporterer data til implementeret meteor-app?

  3. XFS vs EXT4 – Sammenligning af MongoDB-ydelse på AWS EC2

  4. Konvertering af BSON Type ObjectId til JSON (lagring i Mongodb) -Java