Memcached listeing auf UDP mit Django

Frage : Ich bin nicht in der Lage zu bekommen memcached hören auf UDP , zu arbeiten ( get set delete ) mit Django.


Ich habe das Memcached, das nur auf UDP 11211 , wie ich in der vorherigen Frage erwähnt habe . Was ich bisher versucht habe:

1.Schneiden von CACHES , um python-memcached Python-Bindung zu verwenden. Get und set funktionierte nicht mit einfachen Einstellungen wie 'LOCATION': '127.0.0.1:11211' , also versuchte, udp explizit zu spezifizieren (mit dieser Erwähnung als Begründung):

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

gab:

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

2.Setzen von CACHES , um pylibmc CACHES zu verwenden:

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

Der Server lief gut – um weiter zu überprüfen:

 >>> 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 

PS Machen Sie es nicht ein Memcached auf TCP vs UDP Debatte


Eine ähnliche Frage – get () set () memcached listening on UDP mit Python

One Solution collect form web for “Memcached listeing auf UDP mit Django”

Soweit ich in der Lage gewesen bin, die Bibliothek zu erforschen, libmemcached, dass pylibmc verwendet, unterstützt nicht Operationen mit UDP.

Ich habe den Cache-Aufruf verfolgt, get auf libmemcached und ich habe den folgenden Code gefunden :

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

Das mit deinem Fehler übereinstimmt , wie pylibmc 's get Methode auf libmemcached ' s memcached_get Methode in der Datei mit dem obigen Code ( /libmemcached/get.cc ) /libmemcached/get.cc .

Ich habe die gleiche Umgebung in meiner eigenen Maschine installiert und konfiguriert und ich habe identische Ergebnisse.

Trotzdem scheint der set Vorgang perfekt zu funktionieren, da ich beobachtet habe, dass er im Debugging-Modus ausgeführt wird.

Ich habe auch versucht, verschiedene Orte ((PROTOCOL + IP + PORT) s getrennt durch , im LOCATION- Feld) für den Cache-Mix TCP / UDP, aber die Bibliothek NICHT SUPPORT Mischprotokolle entweder und gibt einen Fehler.

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

Alle früheren Fakten werden durch die Dokumentation von libmemcached bestätigt .

Die Möglichkeit, django.core.cache.backends.memcached.MemcachedCache als Backend zu verwenden, wird ebenfalls verworfen, da es nur TCP-Sockets ( SOCK_STREAM ) zum Verbinden mit memcached verwendet .

UPDATE : python-memcached-udp ist jetzt ein Pip-Paket. Sein Mantainer ist offen, um mehr Funktionen hinzuzufügen, wenn nötig . Wenn Sie interessiert sind, könnten wir definitiv daran arbeiten, ein neues Django-Cache-Backend für Memcached mit UDP zu erstellen.

  • Python erhält keine UDP-Pakete (Non Broadcast)
  • Get () set () memcached listening on UDP mit Python
  • Verwenden eines Sockels im UDP-Chat mit Threading
  • Entfernen von Padding aus UDP-Paketen in Python (Linux)
  • Was ist der zweite Teil der Adresse, die von recvfrom zurückgegeben wird?
  • Python struct.pack () für einzelne Elemente in einer Liste?
  • UDP-Client und Server mit Twisted Python
  • Python-UDP-Buchse halb zufällig fehlgeschlagen
  • Python asyncore UDP Server
  • Twisted UDP zu TCP Bridge
  • Live-Video-Stream auf Server (PC) von Bildern von Roboter über UDP gesendet
  • Python ist die beste Programmiersprache der Welt.