Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis - Índices expirados não são excluídos


Eu poderia encontrar a solução para excluir as chaves :phantom e :idx .

Na classe de configuração do Redis, deve-se colocar o seguinte:
@Configuration
@EnableRedisRepositories(enableKeyspaceEvents = EnableKeyspaceEvents.ON_STARTUP, basePackages = {
    "com.aaaaa.bbbbb.persistence.model.repository" }, keyspaceNotificationsConfigParameter = "")

Quando você define o atributo "keyspaceNotificationsConfigParameter" para a string vazia, o comando CONFIG que não funciona no AWS Redis não é executado, mas dessa forma, o Expiration Event Listener é instanciado.

Este atributo traz um valor padrão (Ex), que faz com que o comando CONFIG seja executado.

Isso acontece pelo seguinte 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);
}

Como esta condição não é atendida
if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

o comando CONFIG não é executado.

Acho que o Spring deveria melhorar isso, e não fazer esse fluxo, com base na configuração de um atributo com uma string vazia.

A única coisa que também é necessária é que no AWS ElastiCache (Redis) seja definido um valor para o parâmetro "notify-keyspace-events", como AKE, o que significa que todos os eventos serão notificados.