Welcome! Log In Create A New Profile

Advanced

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

September 16, 2012 05:18PM
Озадачился вопросом выборочной инвалидацией кэша.

к примеру следующий 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 под файловый кэш.

И в общем то вопрос: не изобретаю ли я велосипедов? :)
Subject Author Posted

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

AndrejAndb September 16, 2012 05:18PM

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

sergey.kobzar September 17, 2012 06:22AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 279
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready