Каталог статей
1. Сценарии использования Redis
2. Проникновение в кэш
3. Поломка кэша
4. Лавина кэша
5. Следует ли сначала удалить кэш или сначала изменить базу данных?
6. Персистентность Redis — Redis как кеш, как сохранить данные
7. Стратегия истечения срока действия данных Redis
8. Стратегия удаления данных Redis
Если произойдет проникновение, поломка или лавина кэша, как это решить?
проникновение в кэш:Запросне существуетданные,Mysql не может запрашивать данные и не записывает их напрямую.,Это приведет к тому, что каждый запрос будет проверять данные базы данных.
Решение 1. Кэшируйте пустые данные. Данные, возвращаемые запросом, пусты, и пустой результат по-прежнему кэшируется. {ключ: 1, значение: ноль}
Решение второе: фильтр Блума
фильтр Блума
растровое изображение:Эквивалент**(bit)КусочекМассив единиц. Каждая единица в массиве может хранить только двоичные числа.0или1**
фильтр Блумаэффект:фильтр Блума можно использовать для определения того, находится ли элемент в коллекции.
Подвести итог
1.Сценарии использования Redis
2. Что такое проникновение кэша и как его решить
3.Внедрение фильтра Блума.
Разбивка кэша:кому-тоkeyУстановлен срок годности,Когда срок действия ключа истекает,В это время произошло большое количество одновременных запросов на этот ключ.,Эти одновременные запросы могут мгновенно перегрузить БД.
Подвести итог:
① При настройке ключа установите поле срока действия и сохраните его в кеше. Не устанавливайте срок действия для текущего ключа.
②При запросе определите, истекло ли время после получения данных из Redis.
③Если срок действия истек, откройте другой поток для синхронизации данных. Текущий поток обычно возвращает данные. Эти данные не являются последними.
Конечно, у обоих решений есть свои плюсы и минусы: если вы выбираете строгую согласованность данных, рекомендуется использовать решение с распределенной блокировкой. Производительность может быть не такой высокой, блокировку придется подождать, и могут возникнуть проблемы взаимоблокировки; если вы выбираете ключевую логику для разделения, то приоритет отдается высокой доступности и относительно высокой производительности, но синхронизация данных не может быть строго согласованной.
лавина кэшаотносится к большому количествукэшkeyНедействителен одновременноили ВОЗRedisСервис отключен,В результате в базу данных поступает большое количество запросов.,Оказывает огромное давление.
решение:
Подвести итог
Тайник «Три брата»
Проникайте и создавайте ключи из воздуха, нулевая изоляция фильтра Блума.
Кэш отменяет ключи с истекшим сроком действия и решает проблему блокировок и неистечения срока действия.
У Avalanche большое количество ключей с истекшим сроком действия, и время истечения срока действия должно быть случайным.
Трех братьев необходимо проверить на собеседовании, и текущий предел можно использовать для гарантии чистой прибыли.
Redis как кэш,mysqlданные如何иredisА как насчет синхронизации?(Двойная согласованность записи)
Определенно, определенно, определенноЧтобы установить помещение,Сначала представьсяДеловой фон Допускаются высокие требования к согласованности и постоянная задержка.
Согласованность двойной записи: при изменении данных базы данных одновременно необходимо обновить и кэшированные данные. Данные кэша и базы данных должны быть согласованными.
Распределенная блокировка Radisson обеспечивает согласованность данных,Сильная последовательность, низкая производительность。
Асинхронные уведомления гарантируют конечную согласованность данных.
Асинхронное уведомление на основе MQ:
Асинхронное уведомление на основе канала:
Redis используется в качестве кеша. Как синхронизировать данные MySQL с Redis? (согласованность двойной записи)
Пополнить:
Как эта эксклюзивная блокировка обеспечивает взаимное исключение чтения, записи и чтения? —— Фактически, нижний уровень эксклюзивной блокировки использует setnx, который гарантирует, что только один поток может одновременно управлять блокировкой.
Слышали ли вы об отложенном двойном удалении? Почему бы не использовать его? —— Отложенное двойное удаление, если это операция записи, мы сначала удаляем данные в кеше, затем обновляем базу данных и, наконец, откладываем удаление данных в кеше. Нелегко определить, какой продолжительностью будет задержка; во время процесса задержки могут появиться грязные данные, и строгая согласованность не может быть гарантирована, поэтому они не используются.
Затем вы представите асинхронное решение (вы представите решение повторной блокировки чтения и записи)
Redis предоставляет два метода сохранения данных: 1.RDB 2.AOF.
Полное имя RDB — файл резервной копии базы данных Redis (файл резервной копии данных Redis), также называемый моментальным снимком данных Redis. Проще говоря, все данные, находящиеся в памяти, записываются на диск. Когда экземпляр Redis выходит из строя и перезапускается, файл моментального снимка считывается с диска, и данные восстанавливаются.
Redis имеет внутренний механизм запуска RDB, который можно найти в файле redis.conf. Формат следующий:
Когда запускается bgsave, он разветвляет основной процесс и получает дочерний процесс.,дочерний процессобщийДанные основной памяти процесса。ЗаканчиватьforkЗатем прочитайте данные памяти и напишите RDB документ. Fork использует технологию копирования при записи:
AOF означает «Добавить только файл». Каждая команда записи, обработанная Redis, будет записана в файл AOF, который можно рассматривать как файл журнала команд.
По умолчанию AOF отключен. Чтобы включить AOF, вам необходимо изменить файл конфигурации redis.conf:
Файлы AOF обычно хранятся в рабочем каталоге сервера Redis, а имя файла — Appendonly.aof.
Частоту записи команд AOF также можно настроить через файл redis.conf:
Элементы конфигурации | Пора почистить диск | преимущество | недостаток |
---|---|---|---|
Always | Синхронное мигание | Высокая надежность, практически нет потери данных | Большое влияние на производительность |
everysec | Очищайте диски каждую секунду | Умеренная производительность | Потеря данных до 1 секунды |
no | контроль операционной системы | лучшее выступление | Низкая надежность и возможная потеря больших объемов данных. |
Поскольку это команда записи, файл AOF будет намного больше, чем файл RDB. Более того, AOF записывает несколько операций записи на один и тот же ключ, но смысл имеет только последняя операция записи. Выполнив команду bgrewriteaof, файл AOF можно переписать для достижения того же эффекта с помощью наименьшего количества команд.
Redis также автоматически перезапишет файл AOF при срабатывании порога. Пороги также можно настроить в redis.conf:
У RDB и AOF есть свои преимущества.,Если у вас повышенные требования к безопасности данных,В реальном развитии частообъединить两ВОЗ来使用。
RDB | AOF | |
---|---|---|
метод сохранения | Регулярно делайте снимки всей памяти | Записывайте каждую выполненную команду |
целостность данных | Неполный и будет потерян между резервными копиями. | Относительно полный, зависит от стратегии чистки |
размер файла | Будет сжатие и размер файла будет небольшим. | Запись команд, размер файла очень большой |
Скорость восстановления после простоя | скоро | медленный |
Приоритет восстановления данных | Низкий, поскольку целостность данных не так хороша, как AOF. | Высокий, поскольку целостность данных выше |
Использование системных ресурсов | Высокое и существенное потребление процессора и памяти | Низкие, в основном ресурсы дискового ввода-вывода, но перезапись AOF будет занимать много ресурсов ЦП и памяти. |
Сценарии использования | Может переносить потерю данных в течение нескольких минут и добиваться более высокой скорости запуска. | Высокие требования к безопасности данных,общий |
Поскольку Redis служит кешем, как сохраняются данные?
Redis предоставляет два метода сохранения данных: 1.RDB 2.AOF.
В чем разница между двумя методами сохранения RDB и AOF?
Какой из этих двух методов восстанавливается быстрее?
RDB — это двоичный файл.,Размер также относительно небольшой при сохранении.,Он восстанавливается быстрее,но它有可能会丢数据;Мы в проектеAOF также обычно используется для восстановления данных.,Хотя скорость восстановления AOF несколько,Но риск потери данных гораздо меньше,Вы можете установить стратегию очистки диска в файле AOF.,В то время мы настроили пакетную обработку команд записи один раз в секунду.
Если срок действия ключа Redis истечет, он будет немедленно удален?
set key value [EX seconds] [PX milliseconds] [NX|XX]
set name jw 10
Redis устанавливает время действия данных. По истечении срока действия данные необходимо удалить из памяти. Удаление может осуществляться по разным правилам. Это правило удаления называется политикой удаления данных (политикой истечения срока действия данных). Ленивое удаление, обычное удаление
Ленивое удаление: после установки срока действия ключа оставляем его в покое. Когда ключ нужен, проверяем, истек ли срок его действия, удаляем его, в противном случае ключ возвращается.
Периодическое удаление. Время от времени мы проверяем некоторые ключи и удаляем ключи с истекшим сроком действия (берем определенное количество случайных ключей из определенного количества баз данных для проверки и удаляем ключи с истекшим сроком действия).
Существует два режима периодической очистки:
преимущество:Вы можете уменьшить влияние операций удаления, ограничив продолжительность и частоту операций удаления. CPU влияние. Кроме того, регулярное удаление также может эффективно освободить память, занятую ключами с истекшим сроком действия.
недостаток:Трудно определить, как долго и как часто выполняются операции удаления.。
Redisполитика удаления по истечении срока действия:Ленивое удаление + Удалять регулярно Две стратегии используются вместе
Каковы стратегии истечения срока действия данных Redis?
В Redis предусмотрены две стратегии удаления данных по истечении срока действия:
Два режима для регулярной уборки.:
Redisполитика удаления по истечении срока действия:Ленивое удаление + Удалять регулярно Две стратегии используются вместе。
Что делать, если кешей слишком много, память ограничена, а память заполнена? ——На самом деле, я просто хочу спросить, какова стратегия удаления данных в Redis?
Стратегия устаревания данных:когдаRedisКогда не хватает памяти в,В это время в Redis добавляется новый ключ.,Затем Redis удалит данные в памяти по определенному правилу.,Это правило удаления данных называется удалением памяти.
Redis поддерживает 8 различных стратегий выбора ключей для удаления:
файл redis.conf
# The default is:
#
# maxmemory-policy noeviction
LRU(Least Recently Used)Последний раз использовался。用когда前时间减去最后一次访问时间,Чем больше значение, тем выше приоритет устранения.
LFU(Least Frequently Used)наименее часто используемый。посчитаю каждыйkeyчастота доступа,Чем меньше значение, тем выше приоритет устранения.
LRU: доступ к ключу 1 осуществлялся до 3 с, доступ к ключу 2 осуществлялся до 9 с, а ключ 2 был удален.
LFU: ключ 1 посещался 4 раза за последние 5 с, ключ 2 посещался 9 раз за последние 5 с, а ключ 1 удален.
1) В базе данных содержится 10 миллионов данных, а Redis может кэшировать только 200 000 данных. Как гарантировать, что данные в Redis являются горячими данными?
Используя стратегию исключения allkeys-lru (выберите для удаления наименее использованные данные), то, что остается, является часто используемыми горячими данными.
2) Что происходит, когда Redis не хватает памяти?
Какова стратегия удаления данных? Если это конфигурация по умолчанию (noeviction), об ошибке будет сообщено напрямую.
1) Каковы стратегии удаления данных Redis?
Redis предоставляет 8 стратегий удаления данных (noeviction, Летучие-ttl, allkeys-random, allkeys-random, allkeys-lru, летучих-lru, allkeys-lfu, летучих-lfu). По умолчанию используется noeviction, который не удаляет никакие данные. Внутренний. Если этого недостаточно, об ошибке будет сообщено напрямую; ее можно установить в файле конфигурации Redis;
В нем есть два очень важных понятия: одно — LRU, а другое — LFU.
Allkeys-lru часто используется в процессе разработки (на основе собственных бизнес-сценариев).
В проекте мы настроили allkeys-lru, который выбирает для удаления наименее используемые данные и оставляет некоторые часто используемые ключи в Redis.
2) В базе данных содержится 10 миллионов данных, а Redis может кэшировать только 200 000 данных. Как гарантировать, что данные в Redis являются горячими данными?
Используя стратегию исключения allkeys-lru (выберите для удаления наименее использованные данные), то, что остается, является часто используемыми горячими данными.。
3) Что происходит, когда Redis не хватает памяти?
Какова стратегия удаления данных? Если это конфигурация по умолчанию (noeviction), об ошибке будет сообщено напрямую.。
Справочные видео и заметки, связанные с Dark Horse Programmer