Django Memcached - как проверить, используется ли memcached? - PullRequest
0 голосов
/ 13 октября 2011

Я решил ускорить свое приложение Django с помощью Memcached, но я не уверен, что оно действительно работает, даже если я не вижу сообщения об ошибке. Я гуглил, конечно, для ответа, но ничего не помогло ...

Мой главный вопрос: «Как я могу проверить, используется Memcached или нет?»

Вот что у меня есть:

Django 1.3 с PostgreSQL. Memcached сервер для windows (1.4.5) Клиент Memcached: python-memcached (последний, я думаю, 1.4.7)

Я настроил промежуточное ПО:

MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',)

И кеш с:

CACHES = {
'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': '127.0.0.1:11211',
} }

Затем я запускаю memcached.exe. Я могу получить к нему доступ с помощью команды «telnet localhost 11211».

Так что, кажется, все работает нормально: когда я запускаю команду «stats», я вижу, что memcached видит запросы «GET».

Но когда я получаю данные:

Object.objects.get(ObjectId=1)

Я вижу, что таблица «pg_stat_activity» меняется при каждом запросе. Поэтому я предполагаю, что запрос перенаправляется в базу данных, хотя он не должен ...

Другой тест: я пытался добавить запись в таблицу с помощью командной строки. Насколько я понял Memcached, запись не должна быть добавлена ​​в реальную базу данных, а только в кеш, это правильно? Дело в том, что когда я добавляю запись, она добавляется в базу данных ...

Кто-нибудь знает, как я могу проверить, действительно ли используется Memcached или нет?

Спасибо заранее, S.

1 Ответ

5 голосов
/ 13 октября 2011

Почему вы думаете, что команда будет использовать кеш? Это для получения данных из базы данных, так что это то, что он делает. Django не пытается использовать кеш вместо базы данных, это было бы странно.

Правильный способ кэширования поиска в БД - запросить кеш для элемента, а если его там нет, получить его из БД и кэшировать его:

object = cache.get(key)
if not object:
    object = Object.objects.get(id=key)
    cache.set(key, object, timeout)
return object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...