2

質問: Django で作業 ( ) するためにmemcachedをリッスンすることができません。UDPget set delete


前の質問UDP 11211で述べたように、memcached は でのみリッスンしています。私がこれまでに試したこと:

1.PythonバインディングCACHESを使用するための設定python-memcached。get と set は単純な設定、つまり では機能しなかった'LOCATION': '127.0.0.1:11211'ため、明示的に指定しようとしましたudp(この言及を根拠として使用):

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

与えた:

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

2.Python バインディングCACHESを使用するための設定pylibmc:

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

サーバーは正常に動作しました - さらに確認するには:

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

PSTCP memcached on vsUDPディベートにしないでください


同様の質問 - Python を使用して UDP でリッスンする get() set() memcached

4

1 に答える 1

2

pylibmcが使用するライブラリlibmemcachedを調べることができた限り、UDP での操作はサポートされていません。get

までのキャッシュ呼び出しを追跡したgetところ、次のコードlibmemcachedが見つかりました。

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

pylibmc のメソッドが上記のコードでファイル内のlibmemcachedgetメソッドにマップされているため、これはエラーと一致します( )。memcached_get/libmemcached/get.cc

自分のマシンに同じ環境をインストールして構成しましたが、同じ結果が得られました。

それにもかかわらず、memcachedをデバッグ モードでset実行していることを確認したので、操作は完全に機能しているようです。

また、TCP/UDP を混合するキャッシュに別の場所 ((PROTOCOL + IP + PORT) を ; で区切って指定) を提供しようとしまし、ライブラリはプロトコルの混合をサポートしておらず、エラーを返します。

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

以前の事実はすべて、libmemcachedのドキュメントによって確認されています。

memcachedへの接続に TCP ソケット ()のみを使用するため、バックエンドとして使用するオプションdjango.core.cache.backends.memcached.MemcachedCacheも破棄されます。SOCK_STREAM

更新: python-memcached-udpは pip パッケージになりました。そのマンテイナーは、必要に応じてさらに機能を追加するために開かれています。興味があれば、UDP を使用した Memcached 用の新しい Django キャッシュ バックエンドの作成に取り組むことができます。

于 2016-04-07T22:54:13.633 に答える