memcache_key и HTTP Accept-Language

Dmitriy MiksIr miksir at maker.ru
Thu Dec 4 20:18:32 MSK 2008


Sergey Shepelev пишет:
> Я к сожалению, не работал с map никогда, есть ньюанс, что бекенд может
> отдать для

map - это в общем хеш. Ключом будет Accept-Language, значнием - некая 
переменная, которую уже к ключу приклеете.
http://sysoev.ru/nginx/docs/http/ngx_http_map_module.html

> 
> Accept-Language: en;q=0.9,ru;q=0.8
> 
> сейчас русский контент (потому что другого нет, несмотря на
> предпочтение юзера), а через полчаса - английский, потому что клиент
> добавил настройки для английского языка.
> Это не помешает использовать map?

Задача map тут одна - свести 30+ разнообразных Accept-Language к 
меньшему количеству ключей. Т.е. если у нас поддерживается 4 языка, то 
сводим к четырем значениям. Так как в nginx нет встроенного средства 
получить из Accept-Language список языков в указанном приоритете, то 
приходится делать это руками. Второй вариант - парсить на встроенном 
перле и ставить эту переменную.

Далее, самый простой вариант - что бы для каждого из 4-х языков лежала 
нужная страница. Минусы - кеш увеличится в 4 раза,плюсы - не нужно 
делать fallback если страница в мемкеше не найдена. Так как с fallback 
до конца не ясно - а какой ключ запрашивать дальше.

Если падать всегда на дефолный язык, то проблем не будет, правда тогда 
получится косяк - запрашивает человек fr;q=0.5, en - а у нас в кеше нет 
en страницы, но есть fr... но после ошибки поиска en странцы мы падаем в 
дефаултный язык, который ru.

А как падать не на дефолтный, а на "следующий ожидаемый".. мне в голову 
пока не приходит.

ИМХО, тут самый красивый по быстродействию вариант будет перековырять 
сам мемкеш, что бы он сам определял, какой же ключ отдать на основе 
переданной строчки из Accept-Language.






More information about the nginx-ru mailing list