2013-05-13 3 views
11

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

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

+0

К сожалению, это не возможно. Но вы можете удалить ключи Redis в соответствии с данными, связанными с ними. –

+0

@LeonidBeschastny Спасибо. Это потому, что ключи не сохраняются отсортированным образом или сохранены с датой? – Christoffer

+3

Невозможно получить время создания ключей, если вы не сохраните его самостоятельно в связанных с ним данных. Что касается самых старых ключей, Redis оптимизирован для быстрого доступа к ключам, поэтому он хранит свои данные в виде хеш-таблицы. –

ответ

5

Извините, это невозможно, как указано в комментариях выше. В Redis очень важно создавать свои собственные индексы для поддержки ваших шаблонов доступа.

Совет: Что вы должны сделать, это создать упорядоченный набор (ZADD) со всеми новыми или измененными клавишами и установите счет на отметку времени. Таким образом, вы можете легко получить ключи в течение периода времени, используя ZRANGEBYSCORE.

Если вы хотите истекли существующие ключи, get all keys (дорогой) и установить TTL для каждого, используя команду EXPIRE.

4

Немного поздно, но проверьте команду OBJECT. Там вы найдете время простоя объекта (с разрешением 10 секунд). Он используется для целей отладки, но все же может быть хорошим решением для ваших нужд.

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

+0

Есть ли способ выполнить эту команду из StackExchange.Redis.Extention Api? –

6

ARE YOU СЕЙЧАС используя истекают? Если это так, вы можете пропустить все ключи, если нет 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 

EDIT Как @kouton отметил использование сканирования передачи ключей в производстве см дискуссию о том, что по адресу: SCAN vs KEYS performance in Redis

+2

Никогда не используйте «ключи» в производстве; вместо этого используйте 'scan'. – kouton

Смежные вопросы