Настройка Memcached для кэширования сеансов Django в App Engine

при настройке Django для использования Memcached для кеширования (в моем случае я хочу использовать кеширование сеанса), в settings.py мы установили

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

Я буду запускать проект в App Engine, поэтому мой вопрос заключается в том, что я делаю для записи LOCATION ?

3 Solutions collect form web for “Настройка Memcached для кэширования сеансов Django в App Engine”

Как это происходит, я переносил приложение Django (1.6.5) в GAE за последние несколько дней (GAE Development SDK 1.9.6). У меня сейчас нет большой потребности в кешировании, но хорошо знать, что она доступна, если мне это нужно.

Поэтому я просто попытался использовать django.core.cache.backends.memcached.MemcachedCache качестве моего бэкэнда для кэша (настроен так, как вы описываете в своем вопросе, и я помещаю python-memcached в папку libs) и

 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' 

для управления моими сеансами и GAE дал мне ошибку:

 RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable. 

Так или иначе…

… даже если вы можете заставить это работать, конечно, лучше использовать API API от Google и заимствовать его из реализации Django Memcached, тем более, что библиотека Google была разработана для совместимости с python-memcached, и в противном случае ваше приложение может сломаться на любом с обновлением SDK. Создайте модуль python, такой как my_project/backends.py :

 import pickle from django.core.cache.backends.memcached import BaseMemcachedCache class GaeMemcachedCache(BaseMemcachedCache): "An implementation of a cache binding using google's app engine memcache lib (compatible with python-memcached)" def __init__(self, server, params): from google.appengine.api import memcache super(GaeMemcachedCache, self).__init__(server, params, library=memcache, value_not_found_exception=ValueError) @property def _cache(self): if getattr(self, '_client', None) is None: self._client = self._lib.Client(self._servers, pickleProtocol=pickle.HIGHEST_PROTOCOL) return self._client 

Затем настройка кеша будет выглядеть следующим образом:

 CACHES = { 'default': { 'BACKEND': 'my_project.backends.GaeMemcachedCache', } } 

Это оно! Кажется, это работает нормально, но я должен быть ясно, что он не проверен строго!

В стороне

Попробуйте в google.appengine.api.memcache.__init__.py в вашей папке SDK SDE, и вы найдете:

  def __init__(self, servers=None, debug=0, pickleProtocol=cPickle.HIGHEST_PROTOCOL, pickler=cPickle.Pickler, unpickler=cPickle.Unpickler, pload=None, pid=None, make_sync_call=None, _app_id=None): """Create a new Client object. No parameters are required. Arguments: servers: Ignored; only for compatibility. ... 

т.е. даже если вы можете найти LOCATION для своего экземпляра memcache в облаке, собственная библиотека Google проигнорирует его.

Место должно быть установлено как ваш ip и порт, где работает ваш демон memcache.

Проверьте это в официальной документации django.

Установите LOCATION в ip: port values, где ip – IP-адрес демон Memcached, а порт – порт, на котором работает Memcached, или значение unix: path, где путь – путь к файлу сокета Memcached Unix.

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

Если вы следуете этой документации http://www.allbuttonspressed.com/projects/djangoappengine

И клонирование этого (как указано в приведенной выше ссылке) https://github.com/django-nonrel/djangoappengine/blob/master/djangoappengine/settings_base.py

Я не думаю, что вам нужно определить местоположение . Это ошибка, когда вы ее не определяете?

  • Как экспортировать все ключи и значения из memcached с помощью python-memcache?
  • Пилоны и Memcached
  • Удаление определенных элементов из кеша Django?
  • Как проверить содержимое кеша Django с помощью Python memcached?
  • Изменения кода Django, не отражающие производственный сервер
  • django_pylibmc жалуется на Django 1.7 и python 3.4
  • Получить список ключей кэша в Django
  • Memcached: поддержка автоматического обнаружения python на AWS Elasticache?
  • Python - лучший язык программирования в мире.