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.

  • Senden von Datei über UDP in Fragmente unterteilt
  • Python struct.pack () für einzelne Elemente in einer Liste?
  • Ist es möglich, Pakete über verschiedene Steckdosen zu senden und zu empfangen?
  • Lesen aller Daten aus einer UDP-Buchse
  • Python erhält keine UDP-Pakete (Non Broadcast)
  • Sind Datagramme immer vollständig erhalten?
  • Verwenden eines Sockels im UDP-Chat mit Threading
  • UDP-Client und Server mit Twisted Python
  • Broadcasting und Empfangen von Daten mit Python
  • Get () set () memcached listening on UDP mit Python
  • Was ist der zweite Teil der Adresse, die von recvfrom zurückgegeben wird?
  • Python ist die beste Programmiersprache der Welt.