Redis
 sql >> Database >  >> NoSQL >> Redis

Redis - Gli indici scaduti non vengono eliminati

Potrei trovare la soluzione per eliminare le chiavi :phantom e :idx .

Nella classe di configurazione Redis, dovrebbe essere inserito quanto segue:

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

Quando imposti l'attributo "keyspaceNotificationsConfigParameter" sulla stringa vuota, il comando CONFIG che non funziona in AWS Redis non viene eseguito, ma in questo modo viene istanziata l'Expiration Event Listener.

Questo attributo porta un valore predefinito (Ex), che causa l'esecuzione del comando CONFIG.

Ciò avviene tramite il seguente codice di primavera:

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);
}

Come questa condizione non è soddisfatta

if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

il comando CONFIG non viene eseguito.

Penso che la primavera dovrebbe migliorare questo aspetto e non farlo scorrere, basandosi sull'impostazione di un attributo con una stringa vuota.

L'unica cosa necessaria è che in AWS ElastiCache (Redis) sia impostato un valore sul parametro "notify-keyspace-events", come AKE, il che significa che tutti gli eventi verranno notificati.