目錄
用戶端分布
XMemcached用戶端分布
分布式application.yml配置
設定節點權重
動态添加/删除節點
主輔模式
用戶端分布
Memcached的分布是通過用戶端實作的,用戶端根據key的哈希值得到将要存儲的memcached節點,并将對應的value存儲到相應的節點。
XMemcached用戶端分布
不同的用戶端有着不同的分布式實作方式 , 這裡我們使用XMemcached.
XMemcached同樣支援用戶端的分布政策,預設分布的政策是按照key的哈希值模以連接配接數得到的餘數,對應的連接配接就是将要存儲的節點。如果使用預設的分布政策,你不需要做任何配置或者程式設計。
XMemcached同樣也支援一緻性哈希(consistent hash),可以通過在設定用戶端的時候直接指定:
詳細的Springconfig配置可以參考 https://blog.csdn.net/qq_42543063/article/details/115548208 或者 Memcached內建Springboot以及正常操作
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(iMemcachedProperties.getServers()));
// 指定使用一緻性雜湊演算法
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
memcachedClient = builder.build();
XMemcached還提供了額外的一種雜湊演算法——選舉散列,在某些場景下可以替代一緻性哈希
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(iMemcachedProperties.getServers()));
// 指定使用選舉雜湊演算法
builder.setSessionLocator(new ElectionMemcachedSessionLocator());
memcachedClient = builder.build();
分布式application.yml配置
spring:
memcache:
# 服務位址 , 分布式位址使用空格間隔即可
servers: 127.0.0.1:11211 127.0.0.1:11211
# 連接配接數量
poolSize: 10
# 操作逾時時長
opTimeout: 5000
sanitizeKeys: false # 是否啟用url encode機制
啟動後日志如下:
而後使用分布式進行存儲資料和擷取資料時 都會先經過一緻性hash算法 指定某個服務來進行本次操作
設定節點權重
MemcachedClientBuilder builder = new XMemcachedClientBuilder(
AddrUtil.getAddresses(iMemcachedProperties.getServers() ),
new int[]{1,3}
);
傳入一個int數組,裡面的元素就是節點對應的權重值,比如這裡設定"localhost:12000"節點的權重為1,而"localhost:12001"的權重為3。注意,xmemcached的權重是通過複制連接配接的多個引用來實作的,比如權重為3,那麼就複制3個同一個連接配接的引用放在集合中讓MemcachedSessionLocator查找。
動态添加/删除節點
在JMX支援一節提到的JMX方式操作外,還可以通過程式設計方式:
MemcachedClient client=new XMemcachedClient(AddrUtil.getAddresses(iMemcachedProperties.getServers()));
//Add two new memcached nodes
client.addServer("server3:11211 server4:11211");
//Remove memcached servers
client.removeServer("server1:11211 server2:11211");
主輔模式
你可以設定一個memcached的節點的備份節點,當主節點down掉的情況下,會将本來應該發往主節點的請求轉發給standby備份節點。使用備份節點的前提是啟用failure模式。
MemcachedClient builder=new XmemcachedClientBuilder(AddrUtil.getAddressMap("localhost:11211,localhost:11212 host2:11211,host2:11212"));
上面的例子,将localhost:11211的備份節點設定為localhost:11212,而将host2:11211的備份節點設定為host2:11212
形如“host:port,host:port"的字元串也可以使用在spring配置中,完全相容1.3之前的格式。
啟用faikure模式
// 擷取連接配接
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(iMemcachedProperties.getServers()));
// 從1.3版本開始,xmemcached支援failure模式。所謂failure模式是指,當一個memcached節點down掉的時候,發往這個節點的請求将直接失敗,而不是發送給下一個有效的memcached節點 , 預設不啟用failure模式
builder.setFailureMode(false);