问题:如何get
set
,memcached
只听UDP
,使用 Python(任何生产级 Python 绑定)
到目前为止我所做/尝试过的事情:
使 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 内存缓存绑定——两个广泛使用的绑定(可靠,用于生产)python-memcached
和pylibmc
. 因为python-memcached
我没有发现任何明确提及仅指定 UPD 或任何检查 memcached 是否正在侦听 TCP 或 UDP。对于pylibmc
,我虽然发现了一个提及:
要指定 UDP,服务器地址应以“udp:”为前缀,如“udp:127.0.0.1”
要验证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')
>>>
一个类似的问题 - memcached listeing on UDP with Django