предисловие
Меня всегда озадачивало, как эффективно понять и различить разницу между пробитием Рейдов, пробоем и лавиной. Особенно проникновение и пробой, через какое-то время он будет спутан и неразличим.
Чтобы эффективно помочь автору и друзьям, у которых такие же проблемы, отличить эти три сценария. Автор обобщает некоторые关键词
, я надеюсь, что вы сможете различить и понять разницу между этими тремя сценариями с помощью ассоциаций, как я!
Проникновение в кэш:
Ключевые слова:穿过 Redis 和 数据库
Когда в Redis и базе данных нет нужных нам данных, нам нужно рассмотреть проблему проникновения в кеш.
Часто будет использоваться следующая логика: сначала перейдите в Redis, чтобы найти ресурс, если вы не можете найти его в Redis, перейдите в БД, чтобы найти его, а затем запишите копию данных в Redis после их обнаружения в БД. .
Эта логика не представляет большой проблемы при нормальных обстоятельствах, но если пользователь злонамеренно повторно запрашивает ресурс X, этот ресурс не существует в Redis и БД. Тогда каждый запрос будет напрямую попадать в БД и даже вызывать отказ физической БД.
решение:
1、缓存空结果
Если система обнаруживает, что ресурс не существует ни в Redis, ни в БД, она кэширует пустые результаты на определенный период времени. Следует отметить, что время истечения срока действия на этот раз нельзя устанавливать слишком большим, иначе достоверность данных вызовет большие проблемы.
2、用户合法性校验
Проверка легитимности запроса пользователя и перехват вредоносных повторных запросов
3、布隆过滤器
Не паникуйте, когда увидите этот термин. Проще говоря, цель фильтра Блума — помочь вам определить, существует ли значение.
Возьмем пример: Предположим, теперь у нас есть массив битов длиной 9. Каждая позиция массива может содержать только 1 или 0. 1 указывает, что позиция занята, а 0 указывает, что позиция не используется.
- Для key1 мы используем три хеш-функции для его хеширования соответственно.
- Затем три полученных хеш-значения равны по модулю 9.
- Наконец, три значения по модулю попадают в битовый массив.
- key2 и key3 снова обрабатываются таким же образом.
ключевое значение | Модуль |
---|---|
key1 | 1, 4, 6 |
key2 | 2, 5, 7 |
key3 | 6, 8, 9 |
Наконец, мы обнаружим, что только позиция 3 в этом битовом массиве все еще пуста. Если в это время приходит новый ключ4 и значения хеш-функции, полученные тремя алгоритмами хеширования, равны 1, 2 и 3, мы можем сделать вывод, что ключ4 не должен существовать.
Принцип фильтра Блума относительно прост. Здесь мы должны отметить, что фильтр Блума может иметь определенную вероятность неправильной оценки, но он все же может помочь вам заблокировать большую часть данных, которые не должны существовать.
разбивка кеша
Ключевые слова:定点打击
Только представьте, что если все запросы направлены против ключа, это своего рода атака с фиксированной точкой?
Как понять это? Возьмем крайний пример: например, некая звезда сообщила шокирующие новости, и большое количество людей, которые едят дыни, одновременно посещают Weibo, чтобы проверить сплетни, и срок действия данных в кластере Weibo Redis просто истекает в это время. момент, поэтому бесчисленные запросы поступают напрямую. Когда он попадает в физическую БД системы Weibo, БД мгновенно зависает.
решение:
1、热点数据永远不过期
Например, мы можем установить время кэширования ключа на 25 часов, а затем в фоновом режиме будет выполняться ЗАДАНИЕ для обновления горячих данных партиями каждые 24 часа. решит эту проблему
2、使用互斥锁
На пропускную способность легко повлиять: в большинстве проектов горячая клавиша устанавливается на неограниченный срок действия.
Кэш Лавина
Ключевые слова:Redis 崩了,没有数据了
Сбой Redis здесь не означает, что кластер Redis не работает. Это означает, что в какой-то момент горячие клавиши в кластере Redis недействительны.
Если горячие клавиши в кластере в какой-то момент откажут, представьте, что к БД будет направлено большое количество запросов, и БД может взорваться в одно мгновение.
решение
1、Redis 失效时间加上随机数
Время сбоя Redis плюс случайные числа — сложное решение. В определенной степени снижается мгновенное давление на DB, но это решение также в определенной степени увеличивает стоимость обслуживания.
2、Redis 永不过期
Схема реализации была кратко упомянута выше
Суммировать
Наконец, вернемся к теме!
如何轻松的通过联想的方式来区分 Redis 缓存穿透、击穿、雪崩的区别
-
Проникновение в кеш - пройти (обойти) Redis и БД, чтобы трахнуть тебя
-
Разрушение кеша --- удар с фиксированной точкой, чтобы трахнуть тебя
-
Cache Avalanche --- клавиши горячих доступа недействительны в определенный момент одновременно