Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis - Abgelaufene Indizes werden nicht gelöscht

Ich konnte die Lösung finden, um die Schlüssel :phantom zu löschen und :idx .

In der Redis-Konfigurationsklasse sollte Folgendes eingefügt werden:

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

Wenn Sie das Attribut „keyspaceNotificationsConfigParameter“ auf die leere Zeichenfolge setzen, wird der CONFIG-Befehl, der in AWS Redis nicht funktioniert, nicht ausgeführt, aber auf diese Weise wird der Expiration Event Listener instanziiert.

Dieses Attribut bringt einen Standardwert (Ex), der bewirkt, dass der CONFIG-Befehl ausgeführt wird.

Dies geschieht durch folgenden Springcode:

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

Wie diese Bedingung nicht erfüllt ist

if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

der CONFIG-Befehl wird nicht ausgeführt.

Ich denke, Spring sollte dies verbessern und diesen Fluss nicht dazu bringen, basierend auf dem Setzen eines Attributs mit einer leeren Zeichenfolge.

Das einzige, was zusätzlich benötigt wird, ist, dass im AWS ElastiCache (Redis) ein Wert auf den Parameter „notify-keyspace-events“ gesetzt wird, z. B. AKE, was bedeutet, dass alle Ereignisse benachrichtigt werden.