Кэширование в шаред-меме
Sergey Skvortsov
skv at protey.ru
Wed Oct 4 13:10:47 MSD 2006
On 04.10.2006 1:04, drmarker wrote:
>
> Но, вообще, если запрос ушел к BE, то проще, как вы правильно сказали,
> из BE сразу отдать ответ, чем redirect. Пусть даже и redirect на
> shared cache. КМК.
Вы что-то недопоняли.
Кэш полезен, если ответ есть функция от данных где-то в БД (или
генерация ответа занимает много времени).
Если мы полагаем, что такие запросы частые, то за счёт кэширования мы
экономим на запросах к БД (как самых тяжелых), а то, что запрос сначала
идёт к BE, а потом nginx по его наводке берет из memcached - это куда
меньше времени занимает. Вот эта экономия на запросах к БД и даёт самый
большой выигрыш, а два запроса (к backend и memcached) - это ерунда.
> А для такого тупого кеширования на BE хватает и mod_cache.
Этого хватит только в самых тривиальных случаях. А если несколько
backend'ов - тогда нет. И, опять же, к mod_cache нельзя обращаться из
perl modules, нельзя внешним образом добавлять в него контент и т.д. Он
просто хуже :)
> Но хочется ведь другого решения :)
>
> Типа nginx отдает то, что находит в кеше. Если не находит - запрос на
> BE, BE кладет ответ в кеш с expire, FE его оттуда подхватывает и
> отдает, пока не expire. Красиво!
Здесь тонкость в том, как создать ключ для кэша.
Если это тупо $uri$args - то уже сейчас можно сделать, через комбинацию
location и error_page.
Собственно, как я уже писал ранее, идеально было бы сделать функции в
string expansion в стиле exim, типа "${md5{$args}}".
Либо написать свой модуль.
--
Sergey Skvortsov
mailto: skv at protey.ru
More information about the nginx-ru
mailing list