<beitmemcached> <add key="name1" value="server1:port" /> <add key="name2" value="server1:port,server2:port,server3:port"/></beitmemcached>
我使用的客戶端是BeITMemcached,配置文件可以有兩種方式,如上面代碼,有單臺配置和多臺配置
問題:
在用單臺服務器配置時,如果這臺memecache服務器掛掉的話,那么客戶端這邊該緩存節(jié)點就使用不了了,影響程序的運行
在用多臺配置時,如果其中一臺掛掉,你存入緩存的時候,客戶端會根據(jù)你緩存的key值,用一致性hash算法來選擇存入哪臺緩存服務器,如果你運氣不好,正好存到了那臺有問題的服務器上,對不起,寫入失敗。
解決方案:
使用多臺配置方案,修改客戶端源代碼,如果其中一臺服務器掛掉,在緩存操作失敗的時候,將該有問題的緩存服務器剔除客戶端集合,比如有A,B,C三臺memcache服務,如果B掛了,在操作緩存的時候,會有異常,這時候將B從該序列中剔除,只使用A,C來進行操作;
設定一個檢測間隔時間,每次操作緩存時,在間隔時間之后,都會檢測有問題的服務器,如果服務器恢復正常,則將其重新加入緩存服務器集合中。
使用方法:
public MemcachedClient GetClient() { var mc = MemcachedClient.GetInstance("name2", true); return mc; }只要在獲取客戶端實例的時候,多加一個true參數(shù)就可以了
下載地址:http://pan.baidu.com/s/1eQtOO6Y
其他解決辦法:
可以使用memagent來對memcache進行集群配置,不過我感覺每臺服務器都要安裝一個軟件,各種配置比較麻煩,我的方法比較簡單,自己感覺還是很實用的。
新聞熱點
疑難解答