Подтвердить что ты не робот

Redis: как удалить все ключи старше 3 месяцев

Я хочу сбросить все ключи старше 3 месяцев. Эти ключи не были установлены с датой истечения срока действия.

Или, если это невозможно, могу ли я удалить, возможно, самые старые 1000 ключей?

4b9b3361

Ответ 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 секунд). Он используется для целей отладки, но все же может быть хорошим решением для ваших нужд.

Ссылки: http://redis.io/commands/object