1

質問: Python (製品レベルの Python バインディングのいずれか) を使用してget setmemcachedリッスンのみを行う方法UDP


これまでに行ったこと/試したこと:

memcached が UDP のみをリッスンするようにする - memcached 構成で OPTIONS を指定しました。

OPTIONS="-p 0 -U 11211" # -U for UDP port and -p for TCP port

検証:

# netstat -nlp|grep memcached
udp        0      0 0.0.0.0:11211           0.0.0.0:*                           12095/memcached     
udp6       0      0 :::11211                :::*                                12095/memcached 

get問題は、私が検証できなかったことsetです。

私はPython memcacheバインディングを調べました.2つの広く使用されているもの(信頼性が高く、本番環境で使用される)python-memcachedpylibmc. UPDのみを指定することや、memcachedがTCPまたはUDPでリッスンしているかどうかを確認することについてpython-memcachedの明示的な言及は見つかりませんでした。については、私は言及pylibmcを見つけました:

UDP を指定するには、「udp:127.0.0.1」のように、サーバー アドレスの前に「udp:」を付ける必要があります。

確認するにはpylibmc:

>>> import pylibmc
>>> mc_tcp = pylibmc.Client(["127.0.0.1"], binary=True, behaviors={"tcp_nodelay": True, "ketama": True})
>>> mc_udp = pylibmc.Client(["udp:127.0.0.1"], binary=True, behaviors=None)
>>>
>>> mc_tcp.set('udp_key', 12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
_pylibmc.ConnectionError: error 3 from memcached_set: CONNECTION FAILURE
>>>
>>> mc_udp.set('udp_key', 12)
True
>>>
>>> mc_udp.get('udp_key')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
_pylibmc.NotSupportedError: error 28 from memcached_get(udp_key): ACTION NOT SUPPORTED

確認するにはpython-memcached:

>>> import memcache
>>> mc = memcache.Client([('127.0.0.1', 11211)])
>>> mc.set('key', 12)
0
>>> mc.get('key')
>>> 

同様の質問 - Django を使用した UDP での memcached listeing

4

0 に答える 0