Обзор
Redis
, ранее я писал статью оТри основные проблемы с кэшированием Redis, кумулятивное количество чтений почти 800. Для числа фанатов, у которых всего около 3к, достичь такого количества чтений уже относительно сложно.
Это говорит о том, что статья написана хорошо, и это было подтверждено многими людьми.Если вам интересно, взгляните на [].
Три основные проблемы с кэшемЭто лишь малая часть очков знаний Redis.Если вы хотите глубоко изучить Redis, вам нужно изучить больше очков знаний.
Итак, сегодня возникает вопрос, который часто задают в интервью:Что делать, если ваша память Redis заполнена?Если вы используете Redis в качестве кеша в течение длительного времени, однажды он будет заполнен, верно?
Не паникуйте из-за этого вопроса интервью, в Redis есть параметры конфигурации.maxmemory
МожетУстановите размер памяти Redis.
Файл конфигурации в Redisredis.conf
файл, настроитьmaxmemory
Параметр размера выглядит следующим образом:В реальном производстве точно нет100mb
Размер Ха, не вводите меня в заблуждение, здесь я просто сообщаю всем этот параметр, как правило, небольшие компании настроены на3G
вокруг размера.
В дополнение к конфигурации в файле конфигурации, его также можно настроить в виде параметров командной строки.Конкретная командная строка конфигурации выглядит следующим образом:
//获取maxmemory配置参数的大小
127.0.0.1:6379> config get maxmemory
//设置maxmemory参数为100mb
127.0.0.1:6379> config set maxmemory 100mb
Если фактическое хранилище превышает размер параметров конфигурации Redis,стратегия устранения,ПучокКлюч, который необходимо удалить, удаляется, и для нового значения ключа отбирается чистый участок памяти..
Далее мы подробно поговорим о стратегии исключения в Redis и глубоко разберемся в принципе и сценариях применения каждой стратегии исключения.
стратегия устранения
Redis предоставляет6 стратегий устранения, где по умолчаниюnoeviction
, 6 стратегий устранения следующие:
-
noeviction
(политика по умолчанию): Если размер памяти достигает порога, все инструкции по подаче заявки на память будут сообщать об ошибке. -
allkeys-lru
: Используются все ключиАлгоритм LRUУстранять. -
volatile-lru
:всеКлюч с установленным сроком действия использует алгоритм LRUУстранять. -
allkeys-random
: используются все ключислучайное исключениеспособ устранения. -
volatile-random
:всеКлюч со сроком действия настроен на использование случайного исключенияспособ устранения. -
volatile-ttl
: Все ключи с установленным сроком действияУстранение на основе времени истечения срока действия, чем раньше оно истечет, тем раньше оно будет устранено.
Если данные в RedisЧасть из них — горячие данные, а остальное — холодные данные.,илиМы мало что знаем о распределении доступа к кешу в нашем приложении., то вы можете использоватьallkeys-lru
.
Предполагая, что доступ ко всем данным осуществляется с одинаковой частотой, вы можете использоватьallkeys-random
стратегия ликвидации.
Если вы хотите настроить конкретную стратегию исключения, вы можетеredis.conf
Настроенная в файле конфигурации, конкретная конфигурация выглядит следующим образом:Для этого нужно только открыть комментарий и настроить указанный метод политики.Другой метод настройки — настроить команду.Конкретная команда выполнения выглядит следующим образом:
// 获取maxmemory-policy配置
127.0.0.1:6379> config get maxmemory-policy
// 设置maxmemory-policy配置为allkeys-lru
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
При введении 6 видов стратегий исключения, когда речь идет об алгоритме LRU,Так что же такое алгоритм LRU?
Алгоритм LRU
LRU(Least Recently Used)
То есть это означает наименее недавно использованный ключ, то есть ключ, к которому реже всего обращались в последнее время.Алгоритм удаляет данные в соответствии с историческими записями доступа к данным.
Его основная идея заключается в следующем:Если ключ редко использовался в последнее время, к нему редко будут обращаться в будущем..
На самом деле LRU, реализованный Redis, не является настоящим алгоритмом LRU, то есть мы используем алгоритм LRU для исключения ключей по имени, но на самом деле исключаемые ключи — это не обязательно те ключи, которые действительно бесполезны в течение длительного времени.
Redis использует приблизительный алгоритм LRU,Удалите ключи методом случайного сбора, каждый раз будет случайным образом выбираться 5 ключей, а затем будет исключен последний использованный ключ..
5 ключей здесь являются только номером по умолчанию, и конкретный номер также может быть настроен в файле конфигурации.Конфигурация в файле конфигурации показана на следующем рисунке:Чем больше значение приближенного алгоритма LRU, тем ближе он будет к реальному алгоритму LRU, который можно понять таким образом, т.к.Чем больше значение, тем полнее собранные данные и тем ближе исключаемые данные к последним использованным данным..
Затем, чтобы реализовать алгоритм LRU на основе времени, Redis должен добавить дополнительное пространство памяти для каждого ключа для хранения времени каждого ключа, а размер составляет 3 байта.
В приблизительный алгоритм LRU в Redis 3.0 были внесены некоторые оптимизации.16
память пула кандидатов.
Когда выборочные данные выбираются случайным образом в первый раз, данные будут помещены в пул кандидатов, а данные в пуле кандидатов будут отсортированы по времени.
Когда данные выбраны после второго раза, толькоменьше минимального времени пребывания в пуле кандидатовпопадут в резерв кандидатов.
Когда данные пула кандидатов заполняются в определенное время, ключ с наибольшим временем будет выдавлен из пула кандидатов. При выполнении исключения ключ с наименьшим недавним временем доступа выбирается непосредственно из пула кандидатов для исключения.
Целью этого является выбор значения ключа, которое наиболее точно соответствует значению ключа, к которому последний раз обращались, чтобы значение ключа можно было правильно исключить, поскольку минимальное время в случайно выбранной выборке может не быть минимальным временем в истинном смысле. .
Однако у алгоритма LRU есть недостаток: если к значению ключа ранее не обращались, но обращались недавно, оно будет считаться горячими данными и не будет устранено.
Однако к некоторым данным ранее обращались часто, но в последнее время к ним не обращались, что приводит к возможности удаления этих данных, что приведет к неправильной оценке и удалению горячих данных.
Так в Redis 4.0 помимо алгоритма LRU был добавлен новый алгоритм LFU.Так что же такое алгоритм алгоритма LFU?
LFU-алгоритм
LFU(Least Frequently Used)
То есть это означает, что ключ часто используется в последнее время, то есть ключ, к которому часто обращаются в последний период времени, и в качестве критерия он принимает частоту количества посещений в последний период времени.
Его основная идея состоит в том, чтобы исключать ключи в соответствии с частотой недавних обращений, а ключи, к которым реже обращаются, удаляются первыми, и наоборот.
Алгоритм LFU отражает актуальность ключа и не будет считаться горячими данными, поскольку доступ к алгоритму LRU осуществляется время от времени.
Поддерживается в алгоритме LFUvolatile-lfu
стратегия иallkeys-lfu
Стратегия.
Выше представлены стратегии устранения Redis 6. Эти стратегии устранения 6 предназначены для того, чтобы сказать нам, как это сделать, но когда это делать? Это не было сказано, давайте подробно рассмотрим, когда Redis реализует стратегию исключения.
Удалить ключевую политику с истекшим сроком действия
В Redis есть три операции удаления, а именно:
- Регулярно удалять: Создайте таймер для периодического удаления ключа.
- ленивое удаление: при каждом повторном доступе к ключу будет проверяться срок действия ключа, и если он истек, он будет удален.
- регулярно удалять: Время от времени он будет проверять и удалять ключи с истекшим сроком действия.
Регулярно удалятьзаудобный для памяти, периодически расчищая чистое пространство, но дляНе дружественный к процессору, программе необходимо поддерживать таймер, который будет занимать ресурсы процессора.
ленивое удалениезадружественный к процессору, процессору не нужно поддерживать другие дополнительные операции, но дляНе дружит с памятью, потому что если к некоторым ключам не обращались, они всегда будут занимать память.
Периодическое удаление — это компромисс между двумя вышеуказанными схемами**, удаление просроченных ключей через регулярные промежутки времени, то есть в зависимости от конкретного бизнеса требуется разумное время для регулярного удаления ключей**.
пройти черезНаиболее разумный временной интервал для контроля удаленияудалить ключ, вычестьМеньшее потребление ресурсов процессора, чтобы рационализировать операцию удаления.
Устранение RDB и AOF
Есть два способа сохраниться в RedisRDB
иAOF
, для подробного ознакомления с этими двумя типами персистентности вы можете обратиться к этой статье [].
В RDB копия данных в определенный момент времени в памяти получается в виде моментального снимка.При создании RDB-файла можно передатьsave
иbgsave
Команда выполняется для создания файла RDB.
Ни одна из команд не сохранит ключ с истекшим сроком действия в файле RDB., что также может привести к удалению ключей с истекшим сроком действия.
При запуске Redis для загрузки файла RDB,Master
Ключи с истекшим сроком действия не будут загружены, иSlave
Загрузит ключи с истекшим сроком действия.
В режиме AOF Redis предоставляет меры по оптимизации для Rewrite, а выполняемые команды:REWRITEAOF
иBGREWRITEAOF
,Ни одна из этих двух команд не будет записывать ключи с истекшим сроком действия в файл AOF, и они также могут удалять ключи с истекшим сроком действия..