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

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

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

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

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

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

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

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

repository.delete(id)

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

1 ответ

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

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

Другие вопросы по тегам