Python memcached set_multi 存储问题

3 投票
2 回答
2799 浏览
提问于 2025-04-17 05:29

我在使用python-memcached存储很多键的时候发现了一个问题。以下是我正在做的事情:

import memcache

# This dict has a 2270 entries that is generated on production server
v = eval(open("/home/dragoon/output").read())
a = memcache.Client(['unix:/tmp/memcached.sock'], debug=1)

接下来,我尝试设置所有这些值:

In [94]: len(a.set_multi(v))                                       
MemCached: MemCache: unix:/tmp/memcached.sock: timed out.  Marking dead.
Out[94]: 2270

这是memcached服务器的日志输出:

...
27: going from conn_new_cmd to conn_parse_cmd
<27 set d750bde63a98579f9c2987907aaaf5f8 1 0 18
27: going from conn_parse_cmd to conn_nread
> FOUND KEY d750bde63a98579f9c2987907aaaf5f8
>27 STORED
27: going from conn_nread to conn_write
Failed to write, and not due to blocking: Broken pipe
27: going from conn_write to conn_closing
<27 connection closed.

过了一段时间后:

In [96]: len(a.set_multi({'test':1}))
Out[96]: 0

In [97]: a.get('test')
Out[97]: 1

默认的超时时间是3秒,但即使把它增加到100秒也没有帮助,memcached就是卡住了。所以,我的问题是,memcache到底出了什么问题?

我看到有人说可以存储超过100万个条目,但对我来说,它连2000个都存不下?

2 个回答

1

试试用pylibmc作为你的memcache驱动,而不是用python-memcache。

我在Ubuntu 11上也遇到过Memcache 1.4.7的这个问题。

0

好的。看起来在Ubuntu 10.04 LTS中,memcached 1.4.2这个版本有一些bug。而memcached 1.4.5这个版本运行得很好。

撰写回答