Redis: Реализовать истечение срока действия по хешу

Созданный на 28 окт. 2011  ·  44Комментарии  ·  Источник: redis/redis

Здравствуйте, я хотел бы знать, можно ли установить время истечения срока действия ключей хеша?
Например, я хотел бы иметь список подключенных участников в хэше с истечением 5 минут для каждого ключа.

Является ли это возможным?

Спасибо и заранее извините за мой английский.

С уважением, Макс

Самый полезный комментарий

Ну, я почти никогда не хочу, чтобы срок действия всего хэша истекал сразу. Итак, вы предлагаете разбить хэш на связку ключей. Это работает, но тот же аргумент можно использовать, чтобы спросить, зачем вам вообще нужен хеш? Огромное значение имеет группировка всех ваших логически связанных ключей вместе. В противном случае вам нужно выполнить этот учет через некоторый набор, в котором хранятся ваши ключи, и вы столкнетесь с проблемами ссылочной целостности. Все это выполнимо, но кажется большим упущением в Redis не поддерживать истекающие отдельные ключи в хэше. И я не уверен, что есть смысл в том, чтобы N разных людей решали ее M по-разному.

Все 44 Комментарий

Привет, это невозможно, либо используйте другой ключ верхнего уровня для этого конкретного поля, либо сохраните вместе с заполненным другим полем со временем истечения срока действия, извлеките оба и дайте приложению понять, действительно ли оно по-прежнему или нет, на основе Текущее время.

redis 127.0.0.1:6379> срок действия hset: меня зовут том
(целое число) 0
redis 127.0.0.1:6379> срок действия hget
"Том"

redis 127.0.0.1:6379> срок действия истекает: мне 10
(целое число) 1
redis 127.0.0.1:6379> срок действия ttl
(целое число) 8

...
...
...

redis 127.0.0.1:6379> срок действия ttl: мне
(целое число) -1
redis 127.0.0.1:6379> срок действия hget
(ноль)

так это работает

Я считаю, что запрос на истечение срока действия отдельных полей. Истечение срока действия всего хэша аналогично истечению срока действия любого другого ключа.

Да, я тоже выполнил это требование. Можно ли истечь отдельные поля?

Есть ли конкретная проблема с созданием нескольких хэшей с разным сроком действия?

Ну, я почти никогда не хочу, чтобы срок действия всего хэша истекал сразу. Итак, вы предлагаете разбить хэш на связку ключей. Это работает, но тот же аргумент можно использовать, чтобы спросить, зачем вам вообще нужен хеш? Огромное значение имеет группировка всех ваших логически связанных ключей вместе. В противном случае вам нужно выполнить этот учет через некоторый набор, в котором хранятся ваши ключи, и вы столкнетесь с проблемами ссылочной целостности. Все это выполнимо, но кажется большим упущением в Redis не поддерживать истекающие отдельные ключи в хэше. И я не уверен, что есть смысл в том, чтобы N разных людей решали ее M по-разному.

Спасибо Кевину Менарду и Йохану Бергстрему. На самом деле я встречал тот же сценарий, описанный здесь: https : //github.com/antirez/redis/issues/242, и я читал комментарии, данные Сальваторе.
Если я разделю все поля на ключи следующим образом: hashkey: field2 , .., будет сложно управлять этими ключами как коллекцией. например, при запросе всех полей, KEYS 'patten' обязателен ...

С уважением,
Дэнчуньпин

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

У меня такая же проблема с bjoshuanoah, теперь я использую ключ с ttl вместо хеша, например:
Хеш: имя хеша A - ключ B - значение C
Пара "ключ-значение": ключ A_B - значение C

Технически невозможно отсутствие этой функции или это выбор дизайна?

Выбор дизайна приводит к реализации, которая не допускает реализации.

: +1:

Сам redis не поддерживает, слишком полезна эта функция.

До сегодняшнего дня Redis не планировал реализовать эту функциональность :-(

redis 127.0.0.1:6379> срок действия hset: меня зовут том
(целое число) 0
redis 127.0.0.1:6379> срок действия hget
"Том"

redis 127.0.0.1:6379> срок действия истекает: мне 10
(целое число) 1
redis 127.0.0.1:6379> срок действия ttl
(целое число) 8

...
...
...

redis 127.0.0.1:6379> срок действия ttl: мне
(целое число) -1
redis 127.0.0.1:6379> срок действия hget
(ноль)

так это работает

в хеш-таблице только одно поле, а как насчет нескольких полей? Не получилось бы правильно!

@oylz - я считаю, что первоначальная цель этого запроса функции - допустить истечение срока действия определенных полей внутри хэша, а не всего ключа.

@itamarhaber
как это ?:
hset истекает: меня name1 tom1
hset истекает: меня name2 tom2
hset истекает: меня name3 tom3

Срок действия ttl

Срок действия всей хеш-таблицы (срок действия: меня) истечет.

@oylz Мы знаем, что срок действия полного хэша истечет. он работает, но здесь мы говорим об одном поле любого хеша (как @itamarhaber уже объяснил вам). Например, в вашем случае, как вы можете истечь поле name1 через 5 секунд, name2 через 10 и имя 3 через 15 секунд? Надеюсь, теперь понятно, какой вариант использования здесь обсуждается.

@ nomi-ramzan
ты правда понимаешь? как сказал @itamarhaber : «Я считаю, что первоначальная цель этого запроса функции - допустить истечение срока действия определенных полей внутри хеша, а не всего ключа ».

@ nomi-ramzan
извините, я ответил вам неправильно в начале, я должен ответить @wheelq .
например:
_redis 127.0.0.1:6379> срок действия hset: меня зовут том
(целое число) 0
redis 127.0.0.1:6379> срок действия hget
"Том"

redis 127.0.0.1:6379> срок действия истекает: мне 10
(целое число) 1
redis 127.0.0.1:6379> срок действия ttl
(целое число) 8

...
...
...

redis 127.0.0.1:6379> срок действия ttl: мне
(целое число) -1
redis 127.0.0.1:6379> срок действия hget
(ноль)

так это работает_

Это 2020 год, Redis должен обратить внимание на это

в нашей компании реализована функция истечения срока действия хэш-поля
это база Redis 4.0

Предоставление этой функции изначально будет очень полезно.
Спасибо.

Я все еще жду этого

невероятный! Redis до сих пор не реализовал это!

то же самое здесь, было бы здорово иметь возможность установить срок действия для хэш-полей

+1

невероятный! Redis до сих пор не реализовал это!

+1 за эту функцию

Открыв мир Redis, я представил, как хранить кеш в таком виде:
1) Каждая хеш-таблица - это мой метод api
2) Строки в хеш-таблицах - хеш-функция входных параметров метода, а значение является ответом метода.

+1 за эту функцию

+1 за эту функцию

+1

+1

+1

+1

Есть ли конкретная причина, по которой истекающие ключи в хэшах не реализованы?

Причина, по которой это еще не было реализовано, связана с повышенной сложностью времени (ЦП) и пространства (ОЗУ), которые потребуются для этой функции. Тем не менее, никогда не говори никогда.

Является ли временная сложность порядком полиномиального времени? Что делает его ОЗУ интенсивным, клонированием для каких-либо целей?

Я уверен, что если бы эта функция была реализована, популярность Redis значительно выросла бы.

+1 за эту функцию

+1

+1

Была ли эта страница полезной?
0 / 5 - 0 рейтинги