Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Armazenando chaves com prefixo que expiram em redis


Isso não pode ser feito diretamente. Você pode adicionar uma expiração no hset como um todo, mas não em campos individuais. Se você quiser fazer isso, você pode chamar r.expire('name', time) , onde time é o número de segundos até a expiração.

Como alternativa, você pode usar set em vez de hset :
for i in range(10):
    r.set('name:' + str(i), i, ex=time_to_expire_s)

Isso tirará algumas funcionalidades, já que (por exemplo) você não terá uma boa maneira de listar todas as chaves que começam com 'name:', mas permitirá definir expirações para as chaves de forma independente.

Como segunda opção, você pode definir expirações nos valores do hset . Isso requer lógica do lado do cliente e o Redis não fará nenhuma eliminação para você; mas você poderia fazer algo como:
for i in range(10):
    r.hset(
        'name',
        i,
        json.dumps({ 'value': i, 'expiration': time.time() + time_to_expire_s })
    )

E então, se você ler um valor cuja expiração está no passado, você considera isso uma falta de cache. Isso não ajudará se você estiver tentando expirar as chaves para liberar memória, mas se seu objetivo for fazer com que as chaves expirem por algum tipo de motivo de correção, isso pode funcionar para você.