Проникновение в кеш (не знаю как точно перевести эту фразу, но в зарубежных статьях вы можете встретить такие словосочетания – caching penetration или cache miss attack) — это сценарий, в котором искомого ключа нет в базе данных, а возвращаемый пустой результат из базы данных не кэшируется системой кэширования, и, следовательно, каждый подобный запрос попадет в базу данных. Если злоумышленник (и не только) попытается отправить большое количество запросов с таким ключом, БД подвергнется DOS-атаке и в конечном счете может «упасть».
Для решения этой проблемы используют два подхода:
1. Кэшировать ключи с нулевым значением, с установкой короткого TTL (время жизни).
2. Использовать фильтр Блума. Фильтр Блума — это структура данных, которая может быстро сказать нам, присутствует ли элемент в наборе (под набором данных подразумевается ключи, за хешированные в Фильтре Блума) или нет. Если ключ существует, запрос сначала отправляется в кэш, а затем при необходимости запрашивает базу данных. Если ключ не существует в наборе данных, это означает, что ключ не существует в кэше/базе данных. В этом случае запрос не попадет в кэш или базу данных.
P.S. А вы знаете как работает Фильтр Блума?