2011-11-02 40 views
3

我試圖用python-memcached存儲大量密鑰時發現了一個問題。 下面是我在做什麼:Python memcached set_multi存儲問題

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有什麼問題?

我看到有人在談論存儲超過1000 000個條目,但對我來說,它甚至不能存儲2 000?

回答

0

好的。看來在memcached 1.4.2中存在一些bug,這是Ubuntu 10.04 LTS中的最後一個版本。 Memcached 1.4.5正常工作。

1

嘗試使用pylibmc作爲內存緩存的驅動程序,而不是使用python-memcache的

我在Ubuntu 11看到的Memcache 1.4.7這個問題爲好。

+0

不幸的是,我們仍在使用django 1.2,因此pylibmc目前不是一個選項( – dragoon

+1

)。在Memcached版本1.4.13,本地API(telnet)作爲客戶端和php/pear memcached作爲客戶端驅動程序時也會發生錯誤。 .. – DanFromGermany