предисловие
Некоторые люди могут столкнуться с тем, что Redis часто теряет некоторые данные, записывает их, и через некоторое время они могут исчезнуть. Тогда вы можете использовать Redis в качестве хранилища вместо кеша. Что такое кеш? Использовать память в качестве кэша. Память безгранична? Память драгоценна и ограничена. Диски дешевы и их много. У машины могут быть десятки G памяти, но у нее может быть несколько терабайт места на жестком диске. Redis в основном основан на памяти для высокопроизводительных операций чтения и записи с высокой степенью параллелизма.
Поскольку память ограничена, например, Redis может использовать только 10G, что бы вы сделали, если бы записали в нее 20G данных? Конечно, 10 ГБ данных будут уничтожены, а затем 10 ГБ данных будут сохранены. От каких данных вы избавляетесь? Какие данные сохраняются? Конечно, это означает уничтожение данных, которые обычно не используются, и сохранение данных, которые обычно используются.
Другая проблема в том, что данные явно просрочены, почему они до сих пор занимают память? Эти проблемы в основном вызваны некоторыми внутренними механизмами Redis.Далее я расскажу о двух самых основных механизмах Redis.
Политика истечения срока действия Redis
Политика истечения срока действия Redis:Периодическое удаление + ленивое удаление.
так называемыйрегулярно удалять, что означает, что Redis случайным образом извлекает некоторые ключи со сроком действия каждые 100 мс по умолчанию, проверяет срок их действия и удаляет их, если срок их действия истек.
Предположим, что в Redis есть ключи 10w и установлено время истечения.Если вы проверяете ключи 10w каждые несколько сотен миллисекунд, то Redis в основном умрет, а загрузка процессора будет очень высокой, которая будет потребляться при проверке ключей с истекшим сроком действия. вверх. Обратите внимание, что это не означает обход всех ключей, которые устанавливают время истечения срока действия каждые 100 мс, это проблема производительности.стихийное бедствие. На самом деле Redis каждые 100 мсслучайный розыгрышНекоторые ключи для проверки и удаления.
Но проблема в том, что обычное удаление может привести к тому, что многие ключи с истекшим сроком действия не будут удалены, когда придет время, так что же делать? Так что это ленивое удаление. То есть, когда вы получите ключ, Redis проверит его: если у ключа есть срок действия, он истек? Если он истечет, он будет удален в это время и ничего вам не вернет.
При получении ключа, если срок действия ключа на данный момент истек, он будет удален и ничего не будет возвращено.
Но на самом деле проблема все же есть.Если при обычном удалении вы пропустите много просроченных ключей, и вовремя не проверите, то ленивое удаление вы не используете.Что будет в этот раз? Если в памяти накапливается большое количество просроченных ключей, что приводит к исчерпанию блока памяти Redis, что мне делать?
ответ:Возьмем механизм устранения памяти.
механизм устранения памяти
Механизмы устранения памяти Redis следующие:
- noeviction: Когда памяти не хватает для размещения только что записанных данных, новая операция записи сообщит об ошибке, это вообще не используется, это действительно отвратительно.
- allkeys-lru: Когда памяти недостаточно для размещения вновь записанных данных, включевое пространство, удалить наименее использовавшийся ключ (этоНаиболее используемыйиз).
- allkeys-random: когда памяти недостаточно для размещения вновь записанных данных, включевое пространство, случайным образом удалить ключ, это вообще не используется, зачем делать это случайным образом, это должно быть, чтобы убить последний использованный ключ.
- volatile-lru: Когда памяти недостаточно для размещения вновь записанных данных, вКлючевое пространство с установленным сроком действия, удалите последний использованный ключ (как правило, это неуместно).
- volatile-random: когда памяти недостаточно для хранения вновь записанных данных,Ключевое пространство с установленным сроком действиясередина,Случайное удалениеключ.
- volatile-ttl: когда памяти недостаточно для хранения вновь записанных данных,Ключевое пространство с установленным сроком действияв, естьболее ранний срок годностиКлюч извлекается первым.