За съжаление не. „Контейнерите“ на Redis (т.е. списъци, хешове, набори и сортирани набори) не поддържат изтичане на член, въпреки че тази функционалност е била заявена много пъти в миналото.
Можете обаче да приложите своя собствена логика, за да постигнете този резултат. Има няколко възможни подхода за справяне с това - ето един пример. Вместо да използвате набор, използвайте сортиран набор (ZSET) и задайте резултата на всеки член за времето му на изтичане, като използвате стойности за епоха. Този тип работен процес може да бъде реализиран с помощта на Lua скрипт например. За да добавите членове, използвайте нещо като:
redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])
и го EVAL, използвайки '1 a 60 1' и '1 a 120 2' като аргументи, според вашия пример. За да „изтече“ елементите от комплекта, ще трябва да ги изтриете, след като времето им изтече. Можете да направите това или чрез прилагане на периодичен процес, който сканира вашия списък, или при достъп до него. Например следната Lua може да се използва за изтичане на членове:
redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())
и го EVAL, използвайки '1 a' като аргументи според вашия пример.
РЕДАКТИРАНЕ:Как да постигнете горното с помощта на 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')