проникновение в кеш
Что такое проникновение кэша
При нормальных обстоятельствах запрашиваемые данные все существуют. Если вы запрашиваете несуществующие данные, то есть ни кеш, ни база данных не могут найти данные, база данных будет запрашиваться каждый раз. Это явление, что нет данных в запросе называется износ кеша.
Проблемы с проникновением
Если вы используете несуществующий идентификатор для запроса базы данных каждый раз, это может увеличить нагрузку на вашу базу данных.
Решение
- Кэшировать пустые значения
Причина, по которой происходит проникновение, заключается в том, что нет ключа для хранения этих данных в кэше, поэтому база данных запрашивается каждый раз
Мы можем установить соответствующее значение null в кеше для этих ключей, и нам не нужно запрашивать базу данных при последующем запросе этого ключа.
Конечно, в целях надежности мы должны установить время истечения срока действия этих ключей, чтобы данные действительно не хранились. - BloomFilter
BloomFilter похож на набор hbase, используемый для определения того, существует ли элемент (ключ) в наборе.
Мы помещаем все ключи с данными в BloomFilter.Каждый раз, когда мы запрашиваем, мы сначала идем в BloomFilter для оценки.Если ключа нет, возвращаем null напрямую.
Обратите внимание, что в BloomFilter нет операции удаления. Для удаленных ключей запрос будет проходить через BloomFilter, а затем запрашивать кеш, а затем запрашивать базу данных. Поэтому BloomFilter можно использовать в сочетании с нулевыми значениями кеша. Для удаленных ключей можно кэшировать нулевое значение в кэше.
разбивка кеша
Что такое кэш срыва
В случае высокого параллелизма, когда большое количество запросов запрашивают один и тот же ключ одновременно, ключ просто дает сбой в это время, что приводит к тому, что эти запросы запрашивают базу данных в одно и то же время.Это явление называется сбоем кеша. .
Проблемы, вызванные поломкой
Вызовет чрезмерные запросы к базе данных в определенный момент
Решение
При распределенных блокировках только первый поток, получивший блокировку, запрашивает базу данных, а затем вставляет ее в кеш.Конечно, каждый раз, когда вы получаете блокировку, вы должны проверять, доступен ли кеш.
Кэш Лавина
Что такое кеш-лавина
Когда в определенный момент происходит крупномасштабная инвалидация кеша, например, ваша служба кеша не работает
Решение
- Используйте кластеры, чтобы снизить вероятность простоя службы
- локальный кеш ehcache + текущее ограничение и понижение версии Hystrix
Цель локального кеша ehcache также состоит в том, чтобы учесть, что, когда кластер Redis полностью недоступен, локальный кеш ehcache все еще может поддерживать некоторое время.
Используйте Hystrix для текущего ограничения и понижения версии, например, если 5000 запросов приходят в одну секунду, мы можем установить предположение, что только 2000 запросов могут пройти через этот компонент за одну секунду, тогда оставшиеся 3000 запросов будут проходить через текущую логику ограничения.
Решить проблему централизованного сбоя горячих данных
Когда мы настраиваем кеш, мы обычно устанавливаем время аннулирования кеша, по истечении которого кеш будет аннулирован.
Для некоторых горячих данных, когда кеш недействителен, будет поступать большое количество запросов, которые затем попадут в базу данных, что может привести к сбою базы данных.
Решение
- Установите разные сроки действия
- Использование решения поломки кэша, блокировки
- Никогда не терпит неудачу, то есть используйте запланированное задание для обновления кеша и времени аннулирования кеша, срок действия которого истекает.