удалить ключ / значение из Redis - фантомный ключ не удален

Я использую репозиторий Spring Redis, и меня озадачивает операция удаления и фантомный ключ.

При выполнении удаления фантомный ключ не удаляется, это нормальное поведение? Если да, можно ли принудительно удалить фантомный ключ, когда исходный ключ удален из кода.

Я ожидал, что удаление удалит исходный ключ И связанный фантомный ключ.

Я планировал использовать функцию timeToLive, чтобы гарантировать, что ключи, не удаленные моим приложением, истекут через некоторое время.

Аннотация, установленная для соответствующего объекта домена

@RedisHash(value = "requestContext", timeToLive = 9000)

Удаление происходит следующим образом:

repository.delete(id)

Заранее благодарим за помощь.


person aure_bobo    schedule 28.09.2017    source источник


Ответы (1)


Фантомный ключ не удаляется сразу после удаления ключа / значения из Redis. Spring Data Redis управляет фантомным ключом для управления вторичными индексами наряду с другими функциями. Spring Data Redis сохраняет копию исходного хэша как фантомный хеш с немного более длинным TTL (5 минут). Это означает, что TTL : phantom в Redis на 5 минут больше, чем TTL обычного ключа. Когда истекает срок действия исходного хэша, Spring Data Redis загружает фантомный хеш для выполнения очистки, такой как удаление ссылок из вторичных индексов и т. Д. Подробнее: Срок действия ключа Redis

Когда срок действия установлен на положительное значение, выполняется соответствующая команда EXPIRE. В дополнение к сохранению оригинала в Redis сохраняется фантомная копия, срок действия которой истекает через 5 минут после оригинальной. Это сделано для того, чтобы включить поддержку репозитория для публикации RedisKeyExpiredEvent, содержащего истекшее значение, через Springs ApplicationEventPublisher всякий раз, когда истекает срок действия ключа, даже если исходные значения уже исчезли. События истечения срока действия будут получены во всех подключенных приложениях, использующих репозитории Spring Data Redis.

person Binu George    schedule 19.01.2018