Кэширование в шаред-меме

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