Redis: хэш-карта с ограничением размера и функцией исключения LRU

Допустим, у меня есть несколько ключей в магазине Redis. Я хочу сохранить некоторые пары ключ-значение в новой структуре хэш-карты. Я также хочу сохранить ограничение на размер этой хэш-карты и удалить наименее недавно использовавшуюся пару ключ-значение хэш-карты, когда ее размер (хэш-карта) превышает предел, и не касаться остальных уже существующих структур данных Redis. Предоставляет ли мне Redis какую-либо такую ​​функциональность, где я могу выполнить вытеснение записей хэш-карты в стиле LRU, не касаясь остальных сохраненных ключей? Или можно каким-либо образом построить его поверх того, что предоставляет Redis? Спасибо за помощь!


person Deven    schedule 25.11.2017    source источник


Ответы (1)


Предоставляет ли мне Redis какую-либо такую ​​функциональность, где я могу выполнить вытеснение записей хэш-карты в стиле LRU, не касаясь остальных сохраненных ключей?

Нет, это не так.

Или можно каким-либо образом построить его поверх того, что предоставляет Redis?

Да, можно.

Есть 3 способа сделать это:

  1. Логика на стороне клиента: вы можете управлять логикой вытеснения полей хэша в своем приложении. Для этого потребуется хранить дополнительные (мета) данные в значениях хэша (т. е. разграничить/структурировать метаданные и реальные данные в значении), на уровне хэша (вы можете использовать «специальные» имена полей, например «_eviction_heap_»), и/ или с дополнительными структурами данных (похоже, будет полезен Sorted Set per Hash).

  2. Lua на стороне сервера: для оптимизации вышеперечисленного вы можете упаковать логику в Lua и выполнить ее с помощью EVAL.

  3. Модули Redis: это продвинутый материал, но если вы готовы к этому, вы можете делать практически все, включая реализацию новой "хэш-карты с ограничением размера и функцией вытеснения LRU" структура данных.

person Itamar Haber    schedule 25.11.2017
comment
Спасибо за ответ. Использование отсортированного набора в дополнение к хэш-карте кажется мне предпочтительным. Я новичок, поэтому не совсем понял 2-й и 3-й пункт. Если бы вы могли уточнить это, возможно, это было бы полезно для меня и других, кто споткнется здесь в будущем. Еще раз спасибо. - person Deven; 25.11.2017
comment
WRT #2, прочитайте о команде EVAL. WRT к № 3, см. redis.io/topics/modules-intro - person Itamar Haber; 26.11.2017