Возможно ли в Redis установить TTL (время жизни) не для определенного ключа, а для члена для набора?
Я использую структуру для тегов, предложенную документацией Redis - данные представляют собой простые пары ключ-значение, а теги - это наборы, содержащие ключи, соответствующие каждому тегу, например.
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
Ключ id:id_1
истечет, как ожидалось, но я не вижу эффективного способа удалить соответствующий элемент из набора tag:tag_1
.
Один из способов, с помощью которого я пришел, - использовать задание cron, содержащее script, которое периодически удаляло бы истекшие ключи из наборов, добавляя все имена тегов в другой набор и затем повторяя все теги, а затем все идентификаторы, соответствующие каждый тег и проверка наличия соответствующего ключа - если нет, вызов SREM
.
Я не думаю, что это будет эффективный способ, и мне бы хотелось, чтобы теги были максимально чистыми, потому что размер наборов, вероятно, повлияет на производительность поиска по нескольким тегам (SINTER
). Есть ли более "внутренний" способ?