Redis: возможно ли истечь срок действия элемента в массиве или отсортированном наборе?

124

Возможно ли в настоящее время истечь только целую пару ключ / значение? Что, если я хочу добавить значения в структуру типа списка и автоматически удалить их через 1 час после вставки. Возможно ли это в настоящее время, или для очистки вручную потребуется запустить задание cron?

randombits
источник

Ответы:

76

Возможно ли в настоящее время истечь только целую пару ключ / значение?

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

yojimbo87
источник
1
Есть идеи, что на июль 2016 года они поддержали это в более новой версии?
Kamran Shahid
1
@KamranShahid есть что-нибудь по этому поводу ??
Пракаш Кумар,
1
Ноп Пракаш еще нет.
Камран Шахид
3
Актуален ли этот ответ спустя 8 лет?
simo
2
Да, срок действия элемента во вложенных структурах данных не поддерживается Redis.
Итамар Хабер
94

Есть общий шаблон, который неплохо решает эту проблему.

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

Подробнее здесь: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

Адриан Пельцер
источник
7
Хорошее решение, но я бы хотел, чтобы Redis поддерживал это должным образом. Это обычное требование, которое не требует сложных обходных путей.
UpTheCreek
14
Я не знаю, я действительно счастлив, что они придерживаются своего мнения - расширение набора функций способами, которые они не хотят или не планируют, означает жертвовать дизайном. Создание дополнительных функциональных возможностей на вершине звучит как идеальное решение и оставляет Redis делать то, что он делает, превосходно
Кирен Джонстон
redis идеален сам по себе - простой, понятный дизайн и предсказуемое поведение, что приводит к более чем превосходной производительности
let4be
1
Замечательное решение, мы также смогли использовать простой список FIFO, в котором мы сохранили список и просто взяли первые 5 элементов, а когда список вырос больше, чем 5 + N, в зависимости от масштабируемости, мы удаляем ключ и начинаем заново. Просто, легко и точно такими, какими должны быть алгоритмы Redis. Этот алгоритм дает нашей системе отчетов достаточно времени, чтобы запросить список и посмотреть, с каких устройств пользователи входят в систему. Согласитесь с @KierenJohnstone, Redis спроектирован так, чтобы создавать вокруг себя архитектуру, и идеален таким, какой он есть.
Ligemer
1

Я нашел другой способ справиться с этим, не знаю, поможет ли он кому-нибудь из вас, но вот что:

Хэш и отсортированный набор связаны с помощью guid.

  1. У меня есть хэш, срок действия которого истекает через "x" секунд
  2. У меня есть отсортированный набор, который используется для ранжированных запросов
  3. Данные для обоих добавляются в транзакцию, поэтому в случае сбоя одного из них произойдет сбой обоих.
  4. При запросе с диапазоном значений используйте EXISTS, чтобы проверить, существует ли хешированное значение, когда результаты повторяются по
  5. Если его нет, значит, срок его действия истек, поэтому удалите элемент из отсортированного набора.
JEPrice
источник