Я хочу сбросить все ключи старше 3 месяцев. Эти ключи не были установлены с датой истечения срока действия.
Или, если это невозможно, могу ли я удалить, возможно, самые старые 1000 ключей?
Ответ 1
Вы сейчас используете срок действия? Если это так, вы можете пропустить все ключи, если TTL не установлен, а затем добавить один.
Пример Python:
for key in redis.keys('*'):
if redis.ttl(key) == -1:
redis.expire(key, 60 * 60 * 24 * 7)
# This would clear them out in a week
ИЗМЕНИТЬ
Поскольку @kouton указал на использование сканирования ключей в процессе производства, см. Обсуждение на этом: Производительность SCAN vs KEYS в Redis
Ответ 2
Извините, это невозможно, как указано в комментариях выше. В Redis важно создать собственные индексы для поддержки ваших шаблонов доступа.
Совет.. Вам нужно создать сортированный набор (ZADD) со всеми новыми или измененными ключами и установить оценку в метку времени. Таким образом вы можете легко извлечь ключи в течение периода времени, используя ZRANGEBYSCORE.
Если вы хотите истекли существующие ключи, получить все ключи (дорого) и установить TTL для каждого с помощью команды EXPIRE.
Ответ 3
Немного поздно, но проверьте команду OBJECT. Там вы найдете время простоя объекта (с разрешением 10 секунд). Он используется для целей отладки, но все же может быть хорошим решением для ваших нужд.