нужна помощь с промежуточным / продвинутым кэшированием в django, с memcached и друзьями - PullRequest
2 голосов
/ 13 ноября 2010

Итак: я всегда внедряю свои приложения Django с memcached, работающим параллельно. Для моих целей они всегда работают на одном экземпляре. Я включаю кеш с этими строками в settings.py:

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
CACHE_MIDDLEWARE_SECONDS = 60
CACHE_MIDDLEWARE_KEY_PREFIX = "the_name_of_the_app"
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"

... Я отчетливо вижу преимущества производительности при работе memcache. Но это самая упрощенная из стратегий кеширования, согласно документации django по теме - куда мне пойти отсюда, чтобы получить больше производительности? Нужно ли вручную настраивать свои модели или наборы запросов с помощью методов доступа к memcache или есть стратегически лучший способ?

Мне нравится , запомнил и мне повезло с этим - но кэширование в django остается для меня черным ящиком Пожалуйста, покажи мне путь вперед, если ты знаком с этим путем.

1 Ответ

2 голосов
/ 05 февраля 2011

Memcache не сможет волшебным образом сделать ваш сайт быстрее.Абсолютно первое, что вам нужно сделать, это выяснить, что стоит дорого.Простой способ сделать это - украсить ваши представления или другие функции, чтобы увидеть, как долго они обычно выполняются, например:

def print_latency(f):
    def wrapped(*args, **kwargs):
        try:
            start = time.time()
            r = f(*args, **kwargs)
        finally:
            print >>sys.stderr, 'Latency (%s): %.3fs' % (f.__name__, time.time() - start)
        return r
    wrapped.__name__ = f.__name__
    return wrapped

@print_latency
def my_view(request):
    ...

Следующее, что нужно сделать, это выяснить, какие ресурсы кешируются, т.е.какие данные не меняются или не вызывают ужасных ощущений, если это так?Тогда начните сверху.Можете ли вы кешировать шаблоны?Если нет, можете ли вы кешировать мнения?Если нет, можете ли вы кешировать вызовы базы данных?Последнее, вероятно, где вы будете в конечном итоге, если у вас нет супер-простой веб-сайт.

Тогда вам нужно проверить, хорошо ли кешируются ваши звонки в БД.Возможно, вам придется разбить сложные запросы на более простые.

Кэширование не волшебно и не идеально.У вас может быть хуже задержка с кэшированием, но лучше пропускная способность.Или в среднем задержка может быть лучше, но худшие задержки могут быть ужасными.

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