libmemcached 分布式支持接口如何正确使用

巴山独钓 2011-12-31 05:36:34


使用libmemcached C/C++库简单实验了一下,发现开启2个或多个memcached server,server正常时set和get等都正常,但是其中存在1个或多个down掉后,set和get数据时,一些会失败(这些会映射到down掉的server上)。

正常情况应该是:某些server down后,这时get肯定unhit,但是set应该能够孩成功插入正常的memcached server。

不知道具体需要怎么使用API,才能够支持某些server down后,继续set时,也能够成功。

查阅libmemcached C/C++使用接口的文档,发现很少,即使是官方文档(Document)也没有涉及,libmemcached源码看了一下午,也没瞧出如何正确使用,不知道哪位有使用的经历,或是一些好的例子,谢谢!


测试代码很简单,就是通常使用的方式:
memcached_st *memc;
memcached_return rc;
memcached_server_st *servers;
memc = memcached_create(NULL);
memcached_behavior_set(memc,MEMCACHED_BEHAVIOR_DISTRIBUTION,MEMCACHED_DISTRIBUTIO\
N_CONSISTENT);
servers = memcached_server_list_append(NULL, "localhost", 11211, &rc);
servers = memcached_server_list_append(servers, "localhost", 11212, &rc);

rc = memcached_server_push(memc, servers);
memcached_server_free(servers);

// 这句是我看源码添加的,不行
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS, 1) ;

// 之后就是set和get了
...
memcached_set(memc, ...) ;
memcached_get(memc, ...) ;
...

// 最后释放
memcached_free(memc);
...全文
407 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴山独钓 2012-11-12
  • 打赏
  • 举报
回复
libmemcached的一致性hash算法支持这个,可以参见: http://blog.csdn.net/tankles/article/details/7208988
myron66 2012-10-25
  • 打赏
  • 举报
回复
个人认为(可能不对),在设定了多个memcache服务器后,选择一个hash算法,分布到不同的服务器上去,一旦一台服务器down掉,按照原有hash算法,新值还是会试图保存到down掉的机器上
但是,如果改变新的hash算法进行保存(排除了down掉的机器),虽然新值可以保存,但之前老hash算法保存的值就混乱了,无法取得了
myron66 2012-10-25
  • 打赏
  • 举报
回复
我也遇到同样的问题,机器down掉它就一些保存错误,libmemcached是如何把多个值保存在不同的服务器上的??某个hash算法??
巴山独钓 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq120848369 的回复:]

过一会再set看看, 判定网络不通估计也需要点延迟吧.
[/Quote]

应该不是这问题,我简单的写了一个while 10W次,每次循环sleep几秒,问题一直存在的
qq120848369 2012-01-04
  • 打赏
  • 举报
回复
过一会再set看看, 判定网络不通估计也需要点延迟吧.
巴山独钓 2012-01-04
  • 打赏
  • 举报
回复
节日没人,希望节后有人解答一下

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧