Memcached: поддержка автоматического обнаружения python на AWS Elasticache?

Я начал использовать AWS Elasticache с моим веб-приложением django.

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

Я использую pylibmc (1.2.2) и django-pylibmc-sasl (0.2.4) для подключения к memcached из python.

На этих клиентах работает функция автоматического обнаружения? Как я могу включить его?

3 Solutions collect form web for “Memcached: поддержка автоматического обнаружения python на AWS Elasticache?”

Быстрый ответ

Да для джанго: django-elasticache

Длительный ответ

ElastiCache обеспечивает интерфейс memcached, поэтому есть три варианта его использования:

1. Memcached с настройкой location = Конечная точка конфигурации.

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

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': 'cache.gasdbp.cfg.use1.cache.amazonaws.com:11211', } } 

2. Memcached сконфигурирован со всеми узлами.

Он будет работать нормально, клиент memcache будет разделять элементы между всеми узлами и будет балансировать загрузку на стороне клиента. У вас будут проблемы только после добавления новых узлов или удаления старых узлов. В этом случае вы должны добавлять новые узлы вручную и не забывать обновлять свое приложение после всех изменений в AWS.

 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ 'cache.gqasdbp.0001.use1.cache.amazonaws.com:11211', 'cache.gqasdbp.0002.use1.cache.amazonaws.com:11211', ] } } 

3. Используйте django-elasticache.

Он будет подключаться к кластеру и получать IP-адреса всех узлов и конфигурировать memcached для использования всех узлов.

 CACHES = { 'default': { 'BACKEND': 'django_elasticache.memcached.ElastiCache', 'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211', } } 

Разница между настройкой с списком узлов (django-elasticache) и соединением только с одной конфигурацией Конечная точка (с использованием маршрутизации dns) вы можете видеть на этом графике:

Получить статистику для кластера с двумя узлами

Я использовал привязку PyLibMC, которая, похоже, не поддерживает автоматическое обнаружение.

Бэкэнд Memcached, встроенный в Django и используемый в документации, хорошо работает с уникальной конечной точкой, предоставляемой Elasticache.

Теперь все работает отлично, и я значительно улучшил свое время отклика с Memcached.

Я написал python-клиент для awas elasticache, вы можете попробовать.

Монтаж:

 pip install python_memcached hash_ring pip install elasticache_pyclient 

Простое использование:

 >>> from elasticache_pyclient import MemcacheClient >>> mc = MemcacheClient('test.lwgyhw.cfg.usw2.cache.amazonaws.com:11211') >>> mc.set('foo', 'bar') True >>> mc.get('foo') 'bar' 

Этот пакет вызывает python_memcached для выполнения фактической операции memcache, поэтому он имеет точно такие же функции, как python_memcached, для получения дополнительных параметров вы можете ссылаться на python_memcached.

Вот главная страница elasticache_pyclient: https://github.com/yupeng820921/elasticache_pyclient

  • как вернуть все memcached значения в Google App Engine?
  • Постоянный многопроцессорный общий кэш в Python с stdlib или минимальными зависимостями
  • Как я могу получить время истечения срока для конкретного элемента в memcached
  • В Django / python, как установить memcache в бесконечное время?
  • Использование нескольких серверов memcache в пуле
  • Ошибка при установке pylibmc using pip
  • Какой хороший аналог Flask / Python / WSGI для общедоступных хранилищ PHP Apache, таких как apc_store / apc_fetch?
  • Как сказать Django, что memcached работает с размером элемента больше, чем по умолчанию?
  • Как предотвратить сброс memcache AppEngine
  • Удаление определенных элементов из кеша Django?
  • Memcached получает значение null для String, установленного с помощью python, а затем получает от Java
  • Python - лучший язык программирования в мире.