Redis
 sql >> Base de données >  >> NoSQL >> Redis

Stockage des clés avec préfixe qui expirent dans redis

Cela ne peut pas être fait directement. Vous pouvez ajouter une expiration sur le hset dans son ensemble, mais pas sur des champs individuels. Si vous voulez faire cela, vous pouvez appeler r.expire('name', time) , où time est le nombre de secondes jusqu'à l'expiration.

Comme alternative, vous pouvez utiliser set au lieu de hset :

for i in range(10):
    r.set('name:' + str(i), i, ex=time_to_expire_s)

Cela enlèvera certaines fonctionnalités, puisque (par exemple) vous n'aurez pas un bon moyen de répertorier toutes les clés commençant par 'name:', mais cela vous permettra de définir des expirations pour les clés indépendamment.

Comme deuxième option, vous pouvez définir des expirations dans les valeurs du hset . Cela nécessite une logique côté client, et Redis ne fera aucune suppression pour vous; mais vous pourriez faire quelque chose comme :

for i in range(10):
    r.hset(
        'name',
        i,
        json.dumps({ 'value': i, 'expiration': time.time() + time_to_expire_s })
    )

Et puis si jamais vous lisez une valeur dont l'expiration est dans le passé, vous considérez qu'il s'agit d'un échec de cache. Cela ne vous aidera pas si vous essayez de faire expirer des clés afin de libérer de la mémoire, mais si votre objectif est de faire expirer les clés pour une sorte de raison d'exactitude, cela pourrait fonctionner pour vous.