nginx-0.7.45

Igor Sysoev is at rambler-co.ru
Thu Apr 2 10:06:11 MSD 2009


On Thu, Apr 02, 2009 at 02:26:58AM +0400, Anton Yuzhaninov wrote:

> Монашёв Михаил wrote:
> >
> >Специальный процесс "cache manger" следит за максимальным размером кэша, 
> >заданным параметром max_cache,
> >и при превышении его размеров удаляет самые невостребованные данные.
> 
> А что есть "самые невостребованные данные"? Только LRU (как сделано в 
> memcached)? Или что то более сложное.

LRU.

> Учитываются ли при этом proxy_cache_valid и inactive из proxy_cache_path

Нет.

> Пример - в кэше есть три элемента:
> 
> 1. последний запрос 5 минут назад, inactive и proxy_cache_valid истекают 
> через 10 минут.
> 2. последний запрос 1 минуту назад, proxy_cache_valid истек минуту назад, 
> inactive истекает через 5 минут.
> 3. последний запрос 30 секунд назад. proxy_cache_valid истекает через час, 
> inactive истекает через минуту.
> 
> В каком порядке они будут удаляться если превышен размер кэша?

inactive - это параметр кэша, он не может быть разным для запросов
одного кэша. То есть, если inactive=10m, то

1. последний запрос 5 минут назад, inactive истекает через 5 минут.
2. последний запрос 1 минуту назад, inactive истекает через 9 минут.
3. последний запрос 30 секунд назад, inactive истекает через 9 минут 30s.

В общем так - все ответы кэша лежат в списке.
Если ответ попросили, он уходит в начало списка, а его время
expire становится now + inactive.

cache manager проверяет конец списка, если expire элемента подошёл, он
удаляется. При превышении размера кэша удаление делается также с конца
списка, несмотря на expire.

proxy_cache_valid на удаление никак не влияет. Он влияет только на то,
отдавать ли данные клиенту или сходить к бэкенду. Если же бэкенд лежит,
и можно использовать proxy_cache_use_stale, то одаются устаревшие данные.

Таким образом, если бэкенд лежит, в кэше могут лежать и отдаваться
давно устаревшие, но популярные данные.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list