предисловие
В современном Интернете,高并发
,大数据量
,大流量
стал одобрением, то наш系统
также страдать巨大的压力
, первое решение состоит в том, чтобыredis
.
Тогда неправильное использование Redis приведет к雪崩
,穿透
,击穿
И так далее, это тоже тест программиста技术能力
момент.
Конечно, во время интервью高频面试题
, спросит почти каждый крупный производитель. следуйте ниже贴心老哥
Давайте посмотрим на эти технологии вместе.
Кэш Лавина
Пример
Во время Double Eleven все пользователи будут заходить на Taobao, как только откроют Taobao.首页
, нагрузка на домашнюю страницу очень высока, чтобы улучшить параллелизм, веб-сайт首页数据
кэшируются вredis
В, все ключи Redis失效时间
оба3小时
.
Большое количество пользователей на Double Eleven剁手狂欢
, в это время прошло 3 часа, ключ главной страницы в redis缓存全部失效
, в настоящее время данные не могут быть запрошены в Redis и могут быть отправлены только в数据库
Запрос в середине, из-за чего база данных не отвечает挂掉
.
Пользователи не могут зайти на домашнюю страницу и не могут покупать свои руки.马爸爸
Сразу不开心
, назначьте этого программиста非洲
.
резюме в одном предложении
существует高并发
Далее большое количество кэшированных ключей хранится в同一时间失效
, большое количество запросов падает непосредственно на базу данных, в результате чего база данных выходит из строя.
решение
- Произвольно установите срок действия ключа, чтобы избежать коллективного отказа большого количества ключей.
setRedis(Key,value,time + Math.random() * 10000);
-
Если он развернут в кластере, горячие данные могут быть равномерно распределены по разным библиотекам Redis, чтобы избежать проблемы сбоя всех ключей.
-
Не устанавливайте срок годности
-
Запускайте запланированные задачи и очищайте новый кеш до истечения срока его действия.
проникновение в кеш
Пример
Чувак сделал сайт火了
, передвинул чужой торт и начал疯狂攻击
сайт бро, спасибо бро网络安全
Отсутствие академических навыков использовалось другими.
Кто-то использовал скрипт, чтобы отправить запрос моему сумасшедшему брату, запросid = -1
данные, у Redis нет таких данных, на этот раз穿透redis
, прямое попадание数据库
начальство.
Посреди ночи мой брат спал и не заметил этого, всю ночь яростно нападал на моего брата.数据库
Повесь трубку, тогда братан网站
тоже повесился.
резюме в одном предложении
redis缓存
и数据库
В нем нет релевантных данных (например, пользователь напрямую приноситid<=0
Параметры продолжают инициировать запросы), в redis таких данных нет,无法进行拦截
, проникает непосредственно в数据库
, что приводит к чрезмерной нагрузке на базу данных и простоям.
решение
-
Кэшируйте несуществующие данные в Redis, установите для ключа и значения значение null (независимо от того, являются ли данные нулевыми или системной ошибкой) и установите краткосрочный период истечения срока действия, чтобы время истечения срока действия не повлияло на обычных пользователей.
-
Заблокировать IP-адрес
-
Проверить параметры и перехватить недопустимые параметры
-
Фильтр Блума хэширует все возможные данные в достаточно большое растровое изображение, и данные, которые не должны существовать, будут перехвачены этим растровым изображением, что позволяет избежать нагрузки запросов на базовую систему хранения.
разбивка кеша
Пример
двойной одиннадцать马爸爸
каприз, подумай拍卖
Своя穿了20年的老布鞋
, а с моей подписью программист сохраняет информацию о обуви в redis, и устанавливает3小时
Истекший. Им хватило трех часов размышлений, чтобы схватить его, но он недооценил обаяние Папы Ма.
Продукт привлек внимание 10 миллионов человек, и эти люди продолжали делать ставки на эту пару обуви, и цена становилась все выше и выше.
делать ставку2小时59
Я собираюсь снять 100 миллионов, и вдруг ключевые данные этой пары обуви в Redis过期了
, что приводит к большому количеству запросов ключа к базе данных, что напрямую приводит к зависанию базы данных, и служба не может ответить.
Аукцион окончен, туфли не проданы, а папа Ма снова недоволен.外派到非洲
.
резюме в одном предложении
某一个
Горячая клавиша постоянно поддерживает высокую степень параллелизма.失效的一瞬间
, постоянный высокий одновременный доступ击破缓存
Прямой доступ к базе данных, приводящий к простою базы данных.
решение
-
Установите для данных точки доступа «бесконечный срок действия»
-
Добавьте блокировку мьютекса: описанное выше явление заключается в том, что несколько потоков одновременно запрашивают данные базы данных, тогда мы можем использовать блокировку мьютекса в первом запросе данных запроса, чтобы заблокировать его.
Другие потоки будут ждать, пока они не смогут получить блокировку на этом шаге, дождутся, пока первый поток запросит данные, а затем поместят данные в кэш Redis. Заходит следующий поток и обнаруживает, что кеш уже есть, поэтому сразу идем к кешу
окончательное резюме
Лавина大面积
Кэш ключей недействителен; проникновение в Redis不存在
Этот ключ кеша; разбивка по redis某一个热点
Ключ внезапно выходит из строя, и конечной жертвой становится база данных.
считать
未雨绸缪
: встраивайте Redis, MySQL и т. д. в высокодоступный кластер, чтобы избежать единой точки.
亡羊补牢
: Текущий лимит + понижение в сервисе для предотвращения сбоя MySQL.
重振旗鼓
: Redis сохраняет RDB+AOF, перезапускается при простоях, автоматически загружает данные с диска и быстро восстанавливает кэшированные данные.
Обратите внимание на публичный аккаунт WeChat: IT-брат
Ответ: Видеоруководство по практическому проекту Java: вы можете получить 200G, 27 комплектов видеоурока по практическому проекту
Re: Маршрут обучения Java, вы можете получить самую последнюю и самую полную дорожную карту обучения
Re: Java eBook, вы можете получить 13 обязательных к прочтению книг для лучших программистов
Ответ: полный набор учебных пособий по Java, которые вы можете получить: основы Java, веб-приложение Java, все учебные пособия по JavaEE, включая весеннюю загрузку и т. д.
Re: Шаблон резюме, вы можете получить 100 красивых резюме
В этой статье используетсяmdniceнабор текста