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

Redis:Chcete-li nastavit časový limit pro pár klíč-hodnota v Set

Bohužel ne. "Kontejnery" Redis (tj. seznamy, hash, sady a seřazené sady) nepodporují vypršení platnosti na člena, ačkoli tato funkce byla v minulosti mnohokrát požadována.

K dosažení tohoto výsledku však můžete implementovat svou vlastní logiku. Existuje několik možných přístupů k řešení tohoto problému – zde je jeden příklad. Místo použití sady použijte seřazenou sadu (ZSET) a nastavte skóre každého člena na dobu vypršení platnosti pomocí hodnot epoch. Tento typ pracovního postupu lze implementovat například pomocí skriptu Lua. Chcete-li přidat členy, použijte něco jako:

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

a VYHODNOTAJTE jej pomocí '1 a 60 1' a '1 a 120 2' jako argumentů, podle vašeho příkladu. Chcete-li položky ze sady skutečně „vypršet“, budete je muset po uplynutí jejich doby smazat. Můžete to udělat buď implementací pravidelného procesu, který skenuje váš seznam, nebo při přístupu k němu. Například následující Lua lze použít k vypršení platnosti členů:

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

a VYHODNOTE jej pomocí '1 a' jako argumentů podle vašeho příkladu.

EDIT:Jak dosáhnout výše uvedeného pomocí Pythonu

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. Jak volat do BGSAVE z BookSleeve?

  2. Zavedení podpory transakcí do Cloudera Operational Database

  3. Vytvoření vlastního ID objektu v MongoDB

  4. Mají databáze orientované na dokumenty nahradit relační databáze?