запрос кэшей memcached? - PullRequest
7 голосов
/ 03 марта 2009

после кэширования нескольких представлений в моем проекте django - @ cache_page (60 * 5) - я заметил, что memcached кэширует все представление, даже аргумент запроса! Поэтому, если первый пользователь, который посещает страницу, вошел в систему как userxyz, все остальные анонимные или зарегистрированные пользователи, которые будут запрашивать ту же страницу, будут представлены со страницей, которая была кэширована пользователем userxyz! Очевидно, что это нежелательное поведение ... Так что я могу кэшировать все в представлении, но не аргумент запроса? Или memcached подходит только для анонимных сессий?

Спасибо заранее, Маркос Гогулос

Ответы [ 3 ]

6 голосов
/ 03 марта 2009

Если вы смешиваете динамические и статические данные на одной странице, в вашем случае динамические данные - это зарегистрированное имя пользователя, тогда кэширование страниц не является правильным выбором. Это не изменится, если вы используете файловое кеш-хранилище вместо memcached.

Я предлагаю попробовать кеширование фрагментов. Вы можете сделать что-то вроде этого:

{% load cache %}
{% cache 500 sidebar %}
    .. sidebar ..
{% endcache %}

Это будет кэшировать содержимое тега кэша в течение 500 секунд с идентификатором боковой панели.

Более подробную информацию о кэшировании можно найти здесь:

http://docs.djangoproject.com/en/dev/topics/cache/

<Ч />

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

Скажем, например, что вы хотите иметь полностью статичную страницу, за исключением раздела входа / выхода в верхней части, который отображает разные ссылки в зависимости от того, вошел ли пользователь, тогда вы можете проверить наличие файла cookie аутентификации, когда страница сначала загружается и условно отображает различные данные, используя javascript.

2 голосов
/ 03 марта 2009

Memcached - это просто бэкэнд. Он кэширует все, что вы говорите, чтобы кэшировать. Так что на самом деле ваш вопрос «Подходит ли полностраничное кэширование в Django для динамических страниц?» Вероятно, вы не хотите делать кеш полных страниц, только часть этого. Или только страницы для анонимных запросов (используя CACHE_MIDDLEWARE_ANONYMOUS_ONLY)

см. Книгу http://www.djangobook.com/en/1.0/chapter13/

0 голосов
/ 09 марта 2009

Возможно, вы захотите просмотреть фрагменты шаблона и кэшировать те биты контента, которые не зависят от пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...