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

Redis - Les index expirés ne sont pas supprimés

J'ai pu trouver la solution pour supprimer les clés :phantom et  :idx .

Dans la classe de configuration Redis, il faut mettre :

@Configuration
@EnableRedisRepositories(enableKeyspaceEvents = EnableKeyspaceEvents.ON_STARTUP, basePackages = {
    "com.aaaaa.bbbbb.persistence.model.repository" }, keyspaceNotificationsConfigParameter = "")

Lorsque vous définissez l'attribut "keyspaceNotificationsConfigParameter" sur la chaîne vide, la commande CONFIG qui ne fonctionne pas dans AWS Redis n'est pas exécutée, mais de cette manière, l'écouteur d'événement d'expiration est instancié.

Cet attribut apporte une valeur par défaut (Ex), qui provoque l'exécution de la commande CONFIG.

Cela se produit par le code de printemps suivant :

public void init() {
    if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {
        RedisConnection connection = listenerContainer.getConnectionFactory().getConnection();

        try {
            Properties config = connection.getConfig("notify-keyspace-events");

            if (!StringUtils.hasText(config.getProperty("notify-keyspace-events"))) {
                connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter);
            }

        } finally {
            connection.close();
        }
    }
    doRegister(listenerContainer);
}

Comment cette condition n'est pas remplie

if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

la commande CONFIG n'est pas exécutée.

Je pense que Spring devrait améliorer cela, et non créer ce flux, basé sur la définition d'un attribut avec une chaîne vide.

La seule chose qui est également nécessaire est que dans AWS ElastiCache (Redis), une valeur soit définie sur le paramètre "notify-keyspace-events", tel que AKE, ce qui signifie que tous les événements seront notifiés.