<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进行集群配置,不过我感觉每台服务器都要安装一个软件,各种配置比较麻烦,我的方法比较简单,自己感觉还是很实用的。