Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
В компьютерном программировании негативный кэш — это кэш, который хранит не только положительные, но и "отрицательные" результаты, то есть информацию об ошибках или неудачах. Это означает, что программа запоминает результат, указывающий на неудачу, даже после устранения причины, её вызвавшей. Негативный кэш может быть намеренным решением при проектировании, но также может являться программной ошибкой.
In computer programming, negative cache is a cache that also stores "negative" responses, i. e. failures. This means that a program remembers the result indicating a failure even after the cause has been corrected. Usually negative cache is a design choice, but it can also be a software bug.
Примеры
Рассмотрим веб-браузер, который пытается загрузить страницу при отсутствии сетевого соединения. Браузер получит код ошибки, указывающий на проблему, и может отобразить это сообщение об ошибке пользователю вместо запрошенной страницы. Однако, некорректно помещать сообщение об ошибке в кэш страницы, так как это приведёт к повторному отображению ошибки при повторной попытке загрузки той же страницы, даже после восстановления сетевого соединения. Сообщение об ошибке не должно кэшироваться по URL-адресу страницы; пока браузер не сможет успешно загрузить страницу, при каждой попытке загрузки он должен выполнять новую попытку. Раздражающим аспектом негативного кэширования является то, что пользователь может приложить значительные усилия для устранения проблемы, и даже после определения и устранения её причины, ошибка всё равно не исчезает. Существуют случаи, когда необходимо кэшировать информацию об ошибках. Например, DNS требует, чтобы кэширующие серверы имен запоминали как положительные, так и отрицательные ответы. Если авторитетный сервер имен возвращает отрицательный ответ, указывающий на отсутствие имени, этот ответ кэшируется. Отрицательный ответ может восприниматься как ошибка на уровне приложения, однако для кэширующего сервера имен это не является ошибкой. Время хранения в кэше для отрицательных и положительных ответов может настраиваться независимо.
Consider a web browser which attempts to load a page while the network is unavailable. The browser will receive an error code indicating the problem, and may display this error message to the user in place of the requested page. However, it is incorrect for the browser to place the error message in the page cache, as this would lead it to display the error again when the user tries to load the same page even after the network is back up. The error message must not be cached under the page's URL; until the browser is able to successfully load the page, whenever the user tries to load the page, the browser must make a new attempt. A frustrating aspect of negative caches is that the user may put a great effort into troubleshooting the problem, and then after determining and removing the root cause, the error still does not vanish. There are cases where failure like states must be cached. For instance, DNS requires that caching nameservers remember negative responses as well as positive ones. If an authoritative nameserver returns a negative response, indicating that a name does not exist, this is cached. The negative response may be perceived as a failure at the application level; however, to the nameserver caching it, it is not a failure. The cache times for negative and positive caching may be tuned independently.
Описание
Отрицательный кэш обычно нужен только тогда, когда ошибка обходится очень дорого, а условие возникновения ошибки проявляется автоматически без вмешательства пользователя. Это приводит к ситуации, когда пользователю сложно определить причину сбоя: даже после исправления всего, что ему приходит в голову, программа продолжает работать некорректно. Если ошибка закэширована, программа должна чётко указывать, что необходимо сделать для очистки кэша, помимо описания причины ошибки. В таких случаях отрицательный кэш является примером антипаттерна проектирования. Отрицательный кэш может восстановиться, если срок действия закэшированных данных истечёт.
A negative cache is normally only desired if failure is very expensive and the error condition raises automatically without user's action. It creates a situation where the user is unable to isolate the cause of the failure: despite fixing everything they can think of, the program still refuses to work. When a failure is cached, the program should provide a clear indication of what must be done to clear the cache, in addition to a description of the cause of the error. In such conditions a negative cache is an example of a design anti pattern. Negative cache still may recover if the cached records expires.