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')