sql >> Base de Datos >  >> NoSQL >> Redis

Redis:los índices caducados no se eliminan

Pude encontrar la solución para borrar las claves :phantom y :idx .

En la clase de configuración de Redis se debe poner lo siguiente:

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

Cuando establece el atributo "keyspaceNotificationsConfigParameter" en la cadena vacía, el comando CONFIG que no funciona en AWS Redis no se ejecuta, pero de esta manera, se crea una instancia de Expiration Event Listener.

Este atributo trae un valor por defecto (Ex), lo que hace que se ejecute el comando CONFIG.

Esto sucede por el siguiente código de 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);
}

Cómo no se cumple esta condición

if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

el comando CONFIG no se ejecuta.

Creo que Spring debería mejorar esto, y no hacer que fluya, basado en establecer un atributo con una cadena vacía.

Lo único que también se necesita es que en AWS ElastiCache (Redis) se establezca un valor en el parámetro "notify-keyspace-events", como AKE, lo que significa que se notificarán todos los eventos.