Обратите внимание на общедоступный номер: технический круг xy
Redis очень универсален. Будучи высокопроизводительной базой данных в памяти, она часто используется в бизнес-сценариях кэширования.
Так называемый кэш, то есть при первом получении данных они временно сохраняются в памяти. Таким образом, когда данные потребуются в следующий раз, их можно напрямую извлечь из памяти, и нет необходимости запрашивать базу данных или вызывать удаленный интерфейс, что может значительно повысить производительность приложения.
Если данные в кеше сохраняются вечно, занимаемая память будет становиться все больше и больше. Память ограничена, поэтому системе кэширования необходимо удалять некоторые ненужные кэшированные данные, когда это необходимо для экономии места в памяти.
Redis предоставляет два механизма для достижения вышеуказанных целей:Политика истечения срока действияимеханизм устранения памяти.
Политика истечения срока действия
Студенты, которые использовали Redis, должны знать, что после установки ключа мы можем указать время истечения срока действия ключа. Будет ли ключ удален сразу после истечения срока его действия? Как Redis удаляет эти ключи с истекшим сроком действия?
Давайте сначала поговорим о заключении: Redis должен использоватьрегулярно удалять+ленивое удалениеПолитика истечения срока действия, которая сотрудничает с двумя.
регулярно удалять
Периодическое удаление означает, что Redis по умолчанию выполняет удаление каждые 100 мс.случайный розыгрышДля некоторых ключей с установленным сроком действия проверьте, истекает ли срок действия этих ключей, и удалите их, если срок их действия истек.
Поскольку ключей слишком много, сканирование всех ключей будет очень ресурсоемким, поэтому некоторые ключи выбираются для удаления случайным образом. Таким образом, возможно, что удаление не может быть завершено, и требуется отложенное удаление.
ленивое удаление
Ленивое удаление больше не Redis для активного удаления, но когда клиент хочет получить ключ, Redis сначала проверит, истек ли срок действия ключа, если нет, он вернется к клиенту, если срок его действия истек, то Redis удалит это ключ и не вернет его клиенту.
Таким образом, отложенное удаление может решить проблему с некоторыми ключами, срок действия которых истек, но которые не удаляются регулярно. Однако некоторые ключи с истекшим сроком действия не выбираются случайным образом и не используются клиентом, они остаются в базе данных и занимают память, что в долгосрочной перспективе может привести к исчерпанию памяти. Поэтому Redis предоставляет механизм устранения памяти для решения этой проблемы.
Почему бы не использовать удаление по времени? Так называемое удаление по времени означает, что для контроля за ключом используется таймер.По истечении срока действия ключа он автоматически удаляется.Хотя память освобождается вовремя,но потребляет много ресурсов процессора.Поэтому эта стратегия вообще не рекомендуемые.
механизм устранения памяти
Когда Redis использует память для достижения определенного порога (настроенного через maxmemory), он запускает механизм исключения памяти и выбирает некоторые ключи для удаления. Существует много стратегий устранения памяти, и различные стратегии описаны ниже.
# maxmemory <bytes> 配置内存阈值
# maxmemory-policy noeviction
- noeviction: когда памяти недостаточно для размещения вновь записанных данных, новая операция записи сообщит об ошибке.политика по умолчанию
- allkeys-lru: Удаляет последний использованный ключ в пространстве ключей, когда памяти недостаточно для вновь записанных данных.
- allkeys-random: когда памяти недостаточно для размещения вновь записанных данных, в ключевом пространстве удалить ключ случайным образом.
- volatile-lru: когда памяти недостаточно для размещения вновь записанных данных, в ключевом пространстве с установленным временем истечения срока действия удалите наименее недавно использовавшийся ключ.
- Изменчиво-случайный: когда памяти недостаточно для размещения вновь записанных данных, ключ случайным образом удаляется в ключевом пространстве с установленным временем истечения срока действия.
- volatile-ttl: когда памяти недостаточно для размещения вновь записанных данных, в ключевом пространстве с установленным сроком действия сначала удаляется ключ с более ранним сроком действия.
Как выбрать правильную стратегию?Рекомендуются две стратегии LRU. в соответствии с потребностями вашего бизнеса. Если вы используете Redis только как кэш, а не как персистентность БД, рекомендуется выбрать allkeys-lru; если вы используете Redis как для кэширования, так и для персистентности данных, рекомендуется выбрать volatile-lru.
LRU — это аббревиатура от наименее недавно использованного, то есть наименее недавно использовавшегося. LRU основан на алгоритме замены страниц операционной системы и выбирает самые последние неиспользуемые страницы для удаления. В Redis это выбор ключа, который не использовался дольше всего для удаления.
Как постоянство справляется с истечением срока действия?
В предыдущей статье были представлены две стратегии сохранения Redis: RDB и AOF. На этапе сохранения и восстановления данных также предусмотрена специальная обработка ключей с истекшим сроком действия.
RDB
Сохранение данных из базы данных в памяти в файл RDB: перед сохранением ключа он проверяет, не истек ли срок его действия, и ключ с истекшим сроком действия не войдет в файл RDB. Восстановление данных из RDB файлов в in-memory БД: Перед загрузкой данных в БД ключ будет проверен на истечение срока действия, если он истечет, он не будет импортирован в БД (в случае с основной БД).
AOF
Сохранение данных из базы данных в памяти в файл AOF: когда срок действия ключа истек и он не был удален, в это время выполняется операция сохранения (ключ не войдет в файл aof, поскольку не выполняется команда модификации) По истечении срока действия ключа программа добавит команду del к файлу aof при выполнении операции удаления (ключ с истекшим сроком действия будет удален при восстановлении данных с помощью файла aof в будущем). Перезапись AOF: при перезаписи сначала определяется, истек ли срок действия ключа, и ключ с истекшим сроком действия не будет перезаписан в файл aof.
Внимательно пишите статьи и делитесь ими с душой.
Персональный сайт:yasinshaw.com
Общедоступный номер: технический круг xy