cache

Igor Sysoev is at rambler-co.ru
Tue Nov 14 00:03:31 MSK 2006


On Mon, 13 Nov 2006, Andrei Nigmatulin wrote:

> Подскажите пожалуйста, как можно организовать простой кэш на nginx. Хочется
> примерно следующее:
>
>        location /dynamic/ {
>                        internal;
>                        fastcgi_param  REQUEST_URI      $request_uri;
>                        fastcgi_param  CACHE_ROOT       $_cache_root;
>                        fastcgi_param  SCRIPT_FILENAME  /path/cache.php;
>                        fastcgi_pass   127.0.0.1:9000;
>        }
>
>        location / {
>                        root $_cache_root;
>                        if (!-f $request_filename) {
>                                rewrite .* /dynamic/ last;
>                        }
>                        if ($cached_file_is_too_old) {
>                                rewrite .* /dynamic/ last;
>                        }
>        }
>
> Вся загвоздка в том, как правильно организовать $cached_file_is_too_old. Я
> пробовал вот так:
>
>        perl_set $cached_file_is_too_old '
>                sub {
>                        my $r = shift;
>                        if (time() - (stat $r->filename)[9] > 10) {
>                                return "1";
>                        }
>                        return "";
>                }
>        ';
>
> Но в момент запроса в error_log выдается следующее:
>
> 2006/11/12 22:43:25 [error] 23481#0: *1 call_sv("
>                sub {
>                        my $r = shift;
>                        if (time() - (stat $r->filename)[9] > 10) {
>                                return "1";
>                        }
>                        return "";
>                }
>        ") failed: "Can't call method "filename" on an undefined value at
> (eval 1) line 3.", client: 127.0.0.1, server: inspirer.lan, URL: "/5.html",
> host: "localhost:8080"
>
> Как можно правильно проверить устаревание файла в моем случае ?

У меня не воспроизводиться. Что показывает
perl -V:usethreads -V:usemultiplicity
?

> PS. Приложение таково, что busy locks не существенны, однако по-хорошему их
> тоже хочется. Сделать их можно было бы на встроенном перле, однако пробуждать
> ожидающие в очереди соединения не представляется возможным без специальной
> поддержки со стороны nginx. Даже с одним worker процессом. Скажите, busy
> locks вообще сложно сделать в nginx ?

Бизи локи планируются.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list