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.