Введение

В компьютерном программировании негативный кэш — это кэш, который хранит не только положительные, но и "отрицательные" результаты, то есть информацию об ошибках или неудачах. Это означает, что программа запоминает результат, указывающий на неудачу, даже после устранения причины, её вызвавшей. Негативный кэш может быть намеренным решением при проектировании, но также может являться программной ошибкой.

Примеры

Рассмотрим веб-браузер, который пытается загрузить страницу при отсутствии сетевого соединения. Браузер получит код ошибки, указывающий на проблему, и может отобразить это сообщение об ошибке пользователю вместо запрошенной страницы. Однако, некорректно помещать сообщение об ошибке в кэш страницы, так как это приведёт к повторному отображению ошибки при повторной попытке загрузки той же страницы, даже после восстановления сетевого соединения. Сообщение об ошибке не должно кэшироваться по URL-адресу страницы; пока браузер не сможет успешно загрузить страницу, при каждой попытке загрузки он должен выполнять новую попытку. Раздражающим аспектом негативного кэширования является то, что пользователь может приложить значительные усилия для устранения проблемы, и даже после определения и устранения её причины, ошибка всё равно не исчезает. Существуют случаи, когда необходимо кэшировать информацию об ошибках. Например, DNS требует, чтобы кэширующие серверы имен запоминали как положительные, так и отрицательные ответы. Если авторитетный сервер имен возвращает отрицательный ответ, указывающий на отсутствие имени, этот ответ кэшируется. Отрицательный ответ может восприниматься как ошибка на уровне приложения, однако для кэширующего сервера имен это не является ошибкой. Время хранения в кэше для отрицательных и положительных ответов может настраиваться независимо.

Описание

Отрицательный кэш обычно нужен только тогда, когда ошибка обходится очень дорого, а условие возникновения ошибки проявляется автоматически без вмешательства пользователя. Это приводит к ситуации, когда пользователю сложно определить причину сбоя: даже после исправления всего, что ему приходит в голову, программа продолжает работать некорректно. Если ошибка закэширована, программа должна чётко указывать, что необходимо сделать для очистки кэша, помимо описания причины ошибки. В таких случаях отрицательный кэш является примером антипаттерна проектирования. Отрицательный кэш может восстановиться, если срок действия закэшированных данных истечёт.