MemCache雖然被稱為”分散式快取”,但是MemCache本身完全不具備分散式的功能,MemCache叢集之間不會相互通訊,所謂的”分散式”,完全依賴於客戶端程式的實現。伺服器端僅包括記憶體儲存功能,其實現非常簡單。這種分散式是memcached的最大特點
首先向memcached中新增“tokyo”。將“tokyo”傳給客戶端程式庫後,客戶端實現的演算法就會根據“鍵”來決定儲存資料的memcached伺服器。伺服器選定後,即命令它儲存“tokyo”及其值。
圖2 分散式簡介:新增時
同樣,“kanagawa”“chiba”“saitama”“gunma”都 是先選擇伺服器再儲存。接下來獲取儲存的資料。獲取時也要將要獲取的鍵“tokyo”傳遞給函式庫。函式庫通過與資料儲存時相同的演算法,根據“鍵”選擇服 務器。使用的演算法相同,就能選中與儲存時相同的伺服器,然後傳送get命令。只要資料沒有因為某些原因被刪除,就能獲得儲存的值。
圖3 分散式簡介:獲取時
這樣,將不同的鍵儲存到不同的伺服器上,就實現了memcached的分散式。 memcached伺服器增多後,鍵就會分散,即使一臺memcached伺服器發生故障無法連線,也不會影響其他的快取,系統依然能繼續執行。
Php+memcache實現分散式:
我們PHP的PECL中的Memcache擴充套件能夠有效的解決Memcache的分散式問題,主要的介面就是 addServer() 函式,具體關於addServer()函式的實現可以參考該擴充套件原始碼。那麼現在就存在第二個問題,就是說無法同步資料,可以理解為MySQL中Master/Slave的機制,就是說如果我們有多臺的Memcache伺服器,使用addServer函式的話,每個伺服器儲存的資料都是唯一的,也就是說每個memcached伺服器上儲存的資料不是統一的,而是各自儲存了不通的資料。