2017-09-28 1 views
0

J'utilise un référentiel Spring Redis et je suis intriguée par l'opération de suppression et la touche fantôme.delete key/value from redis - clé fantôme non supprimée

Lorsqu'une suppression est effectuée, la clé fantôme n'est pas supprimée, est-ce un comportement normal? Si oui, est-il possible de forcer une suppression de la clé fantôme lorsque la clé d'origine est supprimée du code.

Je m'attendais à ce qu'une suppression supprime la clé d'origine ET la clé fantôme associée.

J'ai prévu d'utiliser la fonction timeToLive pour m'assurer que les clés non effacées par mon application expireront après un certain temps.

Annotation situé sur l'objet de domaine concerné

@RedisHash(value = "requestContext", timeToLive = 9000) 

La suppression est effectuée sur cette voie:

repository.delete(id) 

Merci d'avance pour votre aide.

Répondre

0

La touche fantôme n'est pas supprimée immédiatement lorsque vous supprimez une clé/valeur de Redis. Spring Data Redis gère la clé fantôme pour gérer les index secondaires avec d'autres fonctionnalités. Données de ressort Redis conserve une copie du hachage d'origine en tant que hachage fantôme avec un TTL légèrement plus long (5 minutes). Cela signifie que le : fantôme TTL dans Redis est 5 minutes de plus que la touche TTL normale. Lorsque le hachage d'origine arrive à expiration, les données du printemps Redis charge le hachage fantôme pour effectuer des nettoyages tels que la suppression des références à partir des index secondaires, etc. En savoir plus: Redis key Expirations

Lorsque l'expiration est fixé à une valeur positive de la fonction commande EXPIRE est exécuté. Outre la persistance de l'original, une copie fantôme est conservée dans Redis et expire 5 minutes après celle d'origine. Ceci est fait pour permettre au support du Repository de publier RedisKeyExpiredEvent contenant la valeur expirée via Springs ApplicationEventPublisher chaque fois qu'une clé expire, même si les valeurs d'origine ont déjà disparu. Les événements d'expiration seront reçus sur toutes les applications connectées à l'aide des référentiels Spring Data Redis.