framework documentacion clean cache borrar python django udp python-memcached pylibmc

python - documentacion - install memcached django



Escucha en memcached en UDP con Django (1)

Pregunta : No puedo recibir memcached escuchando en UDP , para trabajar ( get set delete ) con Django.

Tengo el memcached escuchando solo en UDP 11211 , como he mencionado en la pregunta anterior . Lo que he intentado hasta ahora:

1.Configuración de CACHES para utilizar el enlace Python con python-memcached python. get y set no funcionó con configuraciones simples, es decir, ''LOCATION'': ''127.0.0.1:11211'' , por lo que intenté especificar udp explícitamente (usando esta mención como fundamento):

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

dio:

ValueError: Unable to parse connection string: "udp:localhost:11211"

2. CACHES de CACHES para usar el pylibmc Python:

CACHES = { ''default'': { ''BACKEND'': ''django.core.cache.backends.memcached.PyLibMCCache'', ''LOCATION'': ''udp:127.0.0.1:11211'', ''TIMEOUT'': None, } }

El servidor funcionó bien, para verificar aún más:

>>> import django >>> from django.core.cache import cache >>> cache.set(''udp_key'', 12) >>> cache.get(''udp_key'') Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/python2.7/site-packages/django/core/cache/backends/memcached.py", line 84, in get val = self._cache.get(key) NotSupportedError: error 28 from memcached_get(:1:udp_key): ACTION NOT SUPPORTED

PD : no lo convierta en un memcached en UDP debate TCP vs UDP

Una pregunta similar: get () set () escucha en memcached en UDP usando Python


Hasta donde he podido explorar la biblioteca libmemcached que utiliza pylibmc no es compatible con operaciones UDP.

He rastreado la llamada de caché para get libmemcached y he encontrado el siguiente código :

... if (memcached_is_udp(ptr)) { return memcached_set_error(*ptr, MEMCACHED_NOT_SUPPORTED, MEMCACHED_AT); } ...

que coincide con su error ya get método get de pylibmc se asigna al método memcached_get libmemcached en el archivo con el código anterior ( /libmemcached/get.cc ).

He instalado y configurado el mismo entorno en mi propia máquina y obtuve resultados idénticos.

Sin embargo, la operación de set parece funcionar perfectamente, ya que he observado ejecutar Memcached en modo de depuración.

También traté de proporcionar diferentes ubicaciones ((PROTOCOLO + IP + PUERTO) separadas por : en el campo LOCALIZACIÓN ) para la caché que mezcla TCP / UDP, pero la biblioteca NO APOYA tampoco los protocolos de mezcla y devuelve un error.

CACHES = { ''default'': { ''BACKEND'': ''django.core.cache.backends.memcached.PyLibMCCache'', ''LOCATION'': ''udp:127.0.0.1:11211;127.0.0.1:11211'', ''TIMEOUT'': None, } }

Todos los hechos anteriores están confirmados por la documentación de libmemcached .

La opción de usar django.core.cache.backends.memcached.MemcachedCache como un backend también se descarta, ya que solo usa sockets TCP ( SOCK_STREAM ) para conectarse a memcached .

ACTUALIZACIÓN : python-memcached-udp ahora es un paquete pip. Su mantainer está abierto para agregar más funciones si es necesario . Si está interesado, definitivamente podríamos trabajar en la creación de un nuevo backend de caché Django para Memcached con UDP.