Django: кэшированные элементы не доступны между процессами? - PullRequest
0 голосов
/ 24 февраля 2011

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

Тестирование на производственном сервере с использованием двух параллельных сессий ssh, установка кэша в одном и чтение в другом с помощью серверной части memcache (также тестировалась с файловой серверной частью), и это было результатом:

(сеанс 1):

>>> from django.core.cache import cache
>>> cache.set('foo','bar')
>>> cache.get('foo')
'bar'

(сеанс 2):

>>> from django.core.cache import cache
>>> cache.get('foo', 0) #Cache has not been set yet...
0
>>> cache.get('foo', 0) #Cache has been set in other session, I expect 'bar' here
0

Я использую API-интерфейс кэша низкого уровнякэшировать обработанные результаты загруженного файла.Затем пользователь выполняет еще несколько шагов, описывающих загруженные данные, в какой момент они вводятся в БД.Это делается асинхронно с использованием apache2 с одним потоком на процесс, mod_wsgi и python 2.5.Проблема, с которой я столкнулся, заключалась в том, что "cache.get('<filekey>')" всегда возвращает None при тестировании и загрузке файла.

Спасибо

1 Ответ

1 голос
/ 24 февраля 2011

Система кеширования Django - это уровень абстракции для нескольких разных бэкэндов кеша. Хотя это позволяет вам взаимодействовать с ними, используя один и тот же API, они будут вести себя по-разному в зависимости от того, какой из них вы настроили. См. документацию для полной информации.

Вы определяете, какой бэкэнд использовать, используя параметр CACHE_BACKEND в вашем файле settings.py. Если вы не установите этот параметр, вы получите простой внутрипроцессный кеш, который объяснит, почему вы не можете получить доступ к значениям кеша, установленным в других процессах. Я бы посоветовал вам взглянуть на memcached и использовать его в качестве своего бэкэнда. Он очень быстрый, очень масштабируемый и очень простой в настройке.

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