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

Redis:For at indstille timeout for et nøgleværdipar i Set

Desværre ikke. Redis' "containere" (dvs. lister, hashes, sæt og sorterede sæt) understøtter ikke udløb pr. medlem, selvom denne funktionalitet er blevet anmodet om mange gange tidligere.

Du kan dog implementere din egen logik for at opnå dette resultat. Der er flere mulige tilgange til at løse dette - her er et eksempel. I stedet for at bruge et sæt, skal du bruge et sorteret sæt (ZSET) og indstille hvert medlems score til dets udløbstid ved hjælp af epokeværdier. Denne type arbejdsgang kunne implementeres ved hjælp af et Lua-script for eksempel. For at tilføje medlemmer skal du bruge noget som:

redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])

og EVAL det ved at bruge '1 a 60 1' og '1 a 120 2' som argumenter, ifølge dit eksempel. For faktisk at "udløbe" elementerne fra sættet, skal du slette dem, når deres tid er gået. Du kan gøre det enten ved at implementere en periodisk proces, der scanner din liste eller ved at få adgang til den. For eksempel kan følgende Lua bruges til at udløbe medlemmer:

redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())

og EVAL det ved at bruge '1 a' som argumenter i dit eksempel.

EDIT:Sådan opnås ovenstående ved hjælp af Python

import time
import redis

def add(r, key, ttl, member):
    r.zadd(key, member, int(time.time()+ttl))

def expire(r, key):
    r.zremrangebyscore(key, '-inf', int(time.time()))

...

r = redis.Redis()
add(r, 'a', 1, 60)
add(r, 'a', 2, 120)

# periodically or before every operation do
expire(r, 'a')



  1. Håndtering af MongoDB afbryde/genoprette forbindelse fra node

  2. Sådan gør du:Test HBase-applikationer ved hjælp af populære værktøjer

  3. indstille udløb for Hashmap-værdier i Redis?

  4. MongoDB Document Re-shaping