Re: инвалидация кеша

Sergey Kobzar sergey.kobzar at itcraft.org
Mon Sep 17 10:20:07 UTC 2012


On 09/17/12 00:18, AndrejAndb wrote:
> Озадачился вопросом выборочной инвалидацией кэша.
>
> к примеру следующий use case:
> Есть 2 типа страниц:
> 1) список статей
> 2) статья с пользовательскими комментариями
> страницы генерируются посредством fastcgi и кэшируются что то типа:
> fastcgi_cache_path /var/cache/nginx levels= keys_zone=pagecache:360m
> inactive=360m max_size=300m;
> fastcgi_cache_key
> "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
>
> требуется
> 1) при изменении статьи принудительно инвалидировать кэшированные страницы
> со списком статей и страницы самой статьи
> 2) При добавлении комментария инвалидировать страницу статьи - куда был
> добавлен комментарий
>
>
> И решения которые приходили в голову:
>
> 1) Чистить ВЕСЬ кэш всегда - как-то не спортивно, и в случае высоких
> нагрузок - неприменимо
>
> 2) При отдаче с PHP бэкенда, записывать запрашиваемый URL в отдельное
> хранилище, и при необходимости инвалидировать страницу: выдернуть все
> необходимые URL (попадающие под нужное условие) из хранилища и удалять все
> файлы из /var/cache/nginx соответствующие
> md5($request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri).
> - Несколько сложно, и такой способ вызывает еще ряд сложностей...
>
> 3) При отдаче с PHP бэкенда писать в заголовок ответа Тэги страницы:
> "X-CACHE-TAGS: entry_id1 entry_id2 entry_id3 entry_list" - список из 3х
> статей
> "X-CACHE-TAGS: entry_id1 entry_one" - статья id1
> И при необходимости инвалидировать все страницы, где упоминается entry_id1,
> нужно будет пройтись по всем файлам в кэше, отыскать наличие в заголовке
> данного тега и удалить его.
> Идея показалась интересной, но при наличии большого кол-ва файлов в кэше -
> процесс инвалидации может затянуться.
>
> 4) использовать memcache.
> Вроде бы самый оптимальный вариант, поскольку PHP бэкенд знает куда что
> пишет - и без проблем сможет инвалидировать... Единственный недостаток:
> бэкенд не может писать заголовки ответа в такой кэш. Это минус - поскольку
> усложнит конфиги nginx, но думаю можно смириться. Другой минус - кол-во
> оперативной памяти под мемкэш куда более ограниченей свободного места на HDD
> под файловый кэш.
>
> И в общем то вопрос: не изобретаю ли я велосипедов? :)

3rdp party module:
http://labs.frickle.com/nginx_ngx_cache_purge/

>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,230763,230763#msg-230763
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru



Подробная информация о списке рассылки nginx-ru