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