Redis: можливо закінчення терміну дії елемента в масиві чи відсортованому наборі?


124

Чи можливий лише термін дії цілої пари ключ / значення? Що робити, якщо я хочу додати значення до структури типу «Список» та дозволити їх автоматично видаляти через 1 годину після вставки. Чи це наразі можливо, чи потрібно буде виконати роботу з кроном, щоб зробити очищення вручну?

Відповіді:


76

Чи можливий лише термін дії цілої пари ключ / значення?

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


1
Будь-яка ідея з липня 2016 року вони підтримували це в новій версії?
Камран Шахід

1
@KamranShahid отримав щось на цьому ??
Пракаш Кумар

1
Nop Prakash ще немає.
Камран Шахід

3
Ця відповідь все ще актуальна через 8 років?
simo

2
Так, термін дії елементів у вкладених структурах даних Redis не підтримує.
Ітамар Хабер

94

Існує загальна закономірність, яка досить добре вирішує цю проблему.

Використовуйте відсортовані набори та використовуйте часову позначку як бал. Потім видаляти елементи за діапазоном балів, що можна робити періодично або лише під час кожного запису, коли читання завжди ігнорують елементи поза діапазону, читаючи лише діапазон балів.

Детальніше тут: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNS


7
Гарне рішення, але я б хотів, щоб Redis підтримував це належним чином. Це загальна вимога і не повинно вимагати складних методів вирішення.
UpTheCreek

14
Я не знаю, я дуже радий, що вони дотримуються своїх знарядь - розширюючи набір функцій так, як вони не хочуть чи не планують, значить робити жертви дизайну. Побудова додаткової функціональності на вершині звучить як ідеальне рішення, і залишає Redis робити те, що робить, відмінно
Kieren Johnstone

redis ідеальний, як є - простий, чистий дизайн та передбачувана поведінка, що призводить до більш ніж відмінної підготовки
let4be

1
Чудове рішення, ми також змогли скористатися простим списком фіфо, де ми зберігали список і просто взяли перші 5 елементів, і коли список зростав більше 5 + N залежно від масштабованості, ми видаляємо ключ і починаємо заново. Прості, легкі та точно такі, якими повинні бути алгоритми Redis. Цей алгоритм надає нашій системі звітності достатньо часу, щоб запитувати список і побачити, з якими пристроями користувачі входять. Погодьтеся з @KierenJohnstone, Redis створений для створення навколо нього архітектури і ідеально підходить саме тому, як це є.
Лігемер

1

Я натрапив на інший метод вирішення цього питання, не знаю, чи корисний це комусь із вас, але ось що:

Хеш і сортований набір пов'язані орієнтиром.

  1. У мене є хеш, який встановлено, що закінчується через "х" секунд
  2. У мене є відсортований набір, який використовується для діапазонів запитів
  3. Дані для обох додаються в транзакцію, тож якщо одна не вдасться, вони обоє виходять з ладу.
  4. Після діапазону запиту використовуйте "EXISTS", щоб побачити, чи існує хешоване значення, оскільки результати повторюються
  5. Якщо його немає, термін його дії закінчився, тому видаліть елемент із відсортованого набору
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.