Memcached解决单台服务器故障问题

<beitmemcached>
    <add key="name1" value="server1:port" />
    <add key="name2" value="server1:port,server2:port,server3:port"/>
</beitmemcached>

我使用的客户端是BeITMemcached,配置文件可以有两种方式,如上面代码,有单台配置和多台配置

 

问题:

    在用单台服务器配置时,如果这台memecache服务器挂掉的话,那么客户端这边该缓存节点就使用不了了,影响程序的运行

    在用多台配置时,如果其中一台挂掉,你存入缓存的时候,客户端会根据你缓存的key值,用一致性hash算法来选择存入哪台缓存服务器,如果你运气不好,正好存到了那台有问题的服务器上,对不起,写入失败。

 

解决方案:

    使用多台配置方案,修改客户端源代码,如果其中一台服务器挂掉,在缓存操作失败的时候,将该有问题的缓存服务器剔除客户端集合,比如有A,B,C三台memcache服务,如果B挂了,在操作缓存的时候,会有异常,这时候将B从该序列中剔除,只使用A,C来进行操作;

    设定一个检测间隔时间,每次操作缓存时,在间隔时间之后,都会检测有问题的服务器,如果服务器恢复正常,则将其重新加入缓存服务器集合中。

 

使用方法:

public MemcachedClient GetClient()
        {
            var mc = MemcachedClient.GetInstance("name2", true);
            return mc;
        }

 

只要在获取客户端实例的时候,多加一个true参数就可以了

 

下载地址:http://pan.baidu.com/s/1eQtOO6Y

其他解决办法:

可以使用memagent来对memcache进行集群配置,不过我感觉每台服务器都要安装一个软件,各种配置比较麻烦,我的方法比较简单,自己感觉还是很实用的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。