purge

Alexandr Sergeyev asergeyev на dyn.com
Пт Июл 30 18:23:54 MSD 2010


Игорь,

> В общем, там не особо понятно. Особенно, как именно делается инвалидация.
> Да и многословно как-то - rel="invalidates", rel="invalidated-by":
> напоминает WebDAV. 
> Я пару лет назад планировал ленивую инвалидацию большого объёма ответов
> таким образом: в ответ добавляются заголовки с ключами в виде md5-хэшей:

> X-Accel-Depends: XXXXX...md5...XXXXXX  YYYYY...md5...YYYYYY ...
> X-Accel-Invalidate: XXXXX...md5...XXXXXX  YYYYY...md5...YYYYYY ...

Я считаю что это очень хорошая и работоспособная схема что вы предлагаете и тут и в первом письме с реджексами. Разве что не хватает того самого "Depends" описывающего 

Я не считаю link rel= чем то лучшим. Просто если они сделают RFC то неплохо было бы иметь в планах добавить их решения в поддерживаемые аттрибуты инвалидации. 

В любом случае, любая инвалидация на фронтэнде лучше чем на бэкэнде... Я был бы рад любому решению которое дало бы мне возможность давать кешу большие сроки хранения и вычищать по необходимости а не по таймеру.

Вопрос ещё.... Как вы думаете правильно ли при отправке POST PUT DELETE на конкретный URL инвалидировать его копию (полученную по GET) в кеше? На мой взгляд это совершенно не нужное, но люди с REST API или прочими "стандартными" подходами будут этого ожидать (как собственно и link rel=" на какой то стадии "стандартизирования").


Ещё раз перечитал вашу ленивую инвалидацию и подумал что возможно парсер заголовков и прочие подходы к инвалидации будут медленнее чем что-то описанное раз и навсегда в конфиге... (не возьмусь за верность синтакса просто мысли)

location /admin/ {
    proxy_cache_purge accel-invalidate; # чтоб читал X-Accel-Invalidate или link-invalidates чтоб rel...
}

location /[0-9]+/ {
    if ($arg_action = "send_comment") {
        proxy_cache_purge /path/$some_folder_via_map/comments.xml
    }
    proxy_cache_purge_depends /path/$some_folder_via_map/comments.xml; # или например название заголовка X-Accel-Depends
}


Может и что-такое для скорости придумать? Запутано конечно выглядит.... Перемудрил? 

Но мой вопрос в одном  - можно ли сделать быструю инвалидацию фронтэндом так или парсинг заголовков в любом случае произведён и нет ничего сложного чтоб их и использовать?




Саша.


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