如何处理MEMCACHED_SERVER_MARKED_DEAD?

时间:2011-07-13 09:56:25

标签: memcached libmemcache

我有一组10个内存缓存,使用一致的散列。当在不可用的服务器上搜索传递给memcached_get()的密钥时,我只得到MEMCACHED_SERVER_MARKED_DEAD响应(返回值)。

在这种情况下,我希望密钥应该重新分配给下一个可用的服务器,我应该从下一个NOTFOUND调用中获得memcached_get()。但是我仍然得到MEMCACHED_SERVER_MARKED_DEAD,因此我无法设置新值。

我发现我可以致电memcached_behavior_set(..., MEMCACHED_BEHAVIOR_DISTRIBUTION)。这会导致哈希重新分配,然后它可以正常工作。但是,我认为这不是一个好方法。是吗?

2 个答案:

答案 0 :(得分:-1)

通常,如果要处理多个memcached池,则需要从头开始启用MEMCACHED_BEHAVIOR_DISTRIBUTION。所以是的,解决方案将起作用。

如果您还有其他问题,请查看MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS,它会在x次失败后自动从池中清除故障服务器。

答案 1 :(得分:-1)

我自己找到了答案。

https://bugs.launchpad.net/libmemcached/+bug/777672

应用补丁解决了我所有的问题。请注意,我不知道自从0.39以来它已被打破,没有人关心。