在pylibmc中如何正确启用buffer_request行为?

1 投票
1 回答
751 浏览
提问于 2025-04-17 13:38

如果我运行下面的脚本,它会在设置的时候抛出一个异常。

文件名:buffertest.py

import pylibmc
mc = pylibmc.Client(['localhost:11211'], behaviors={'buffer_requests': True})
mc.set('key1', 'value1')
print 'Reaching here'
print mc.get('key1')

输出结果:

root@shady:~# python buffertest.py 
Traceback (most recent call last):
  File "buffertest.py", line 3, in <module>
    mc.set('key1', 'value1')
_pylibmc.MemcachedError: error 32 from memcached_set: SUCCESS

如果我捕捉到那个异常,然后再调用get,就会出现一个错误:

import pylibmc
mc = pylibmc.Client(['localhost:11211'], behaviors={'buffer_requests': True})
try:   
        mc.set('key1', 'value1')
except:
        pass
print 'Reaching here'
print mc.get('key1')

输出结果:

root@shady:~# python buffertest.py
Reaching here
Traceback (most recent call last):
  File "buffertest.py", line 8, in <module>
    print mc.get('key1')
_pylibmc.MemcachedError: error 47 from memcached_get(key1): SERVER HAS FAILED AND IS    DISABLED UNTIL TIMED RETRY                                                                                                                                                                                     

我是不是用错了这个行为?我理解这个行为是这样的:集合(sets)会在客户端进行缓存,然后在第一次调用get的时候再发送到服务器。为什么会导致服务器错误呢?

1 个回答

0

试着把二进制选项设置为假(False):

mc = pylibmc.Client(['localhost:11211'], binary=False, behaviors={'buffer_requests': True})

撰写回答