memcached
Memcached 是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護(hù)進(jìn)程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護(hù)進(jìn)程通信。但是它并不提供冗余(例如,復(fù)制其hashmap條目);當(dāng)某個服務(wù)器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。
Memcached官方:http://danga.com/memcached/
關(guān)于Memcached的介紹請參考:Memcached深度分析
下載Windows的Server端
下載地址:http://code.jellycan.com/memcached/
windows服務(wù)端下載地址:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
windows服務(wù)端安裝:
http://www.cnblogs.com/xd502djj/archive/2012/09/25/2701800.html
http://www.cnblogs.com/yangy608/archive/2011/10/07/2200669.html
http://www.cnblogs.com/hoojo/archive/2012/07/19/2599534.html
http://www.open-open.com/lib/view/open1345651870876.html
windows服務(wù)端安裝:
http://www.cnblogs.com/xd502djj/archive/2012/09/25/2701800.html
http://www.cnblogs.com/wucg/archive/2011/03/01/1968185.html
ehcache集群的相關(guān)文章:http://www.cnblogs.com/yangy608/archive/2011/10/07/2200669.html
http://www.cnblogs.com/hoojo/archive/2012/07/19/2599534.html
http://www.open-open.com/lib/view/open1345651870876.html
以圖為例
Cache A、Cache B,Cache C為三臺Memcached服務(wù)器
根據(jù)三臺Memcached的IP和端口,計算出他們的Hash值,然后分布在整個圓環(huán)上
每兩臺Memcached服務(wù)器的Hash值之間為一個區(qū)間
Key1、Key2、Key3、Key4
為要存儲在Memcached里的4個Key
根據(jù)4個Key計算出他們的Hash值,同樣也落在這個圓環(huán)上
在這個環(huán)形空間中,如果沿著順時針方向從對象的 key 值出發(fā),直到遇見一個 cache ,那么就將該對象存儲在這個 cache 上,因為對象和 cache 的 hash 值是固定的,因此這個 cache 必然是唯一和確定的。
根據(jù)上面的方法,對象 key1 將被存儲到 cache A 上; key2 和 key3 對應(yīng)到 cache C ; key4 對應(yīng)到 cache B;
同一個key不是三臺服務(wù)器上面都有映射, 只會映射到其中一臺服務(wù)器上面
集群中其中一個Memcached節(jié)點宕機,會導(dǎo)致存在著上面的Key全部失效而重新對這些key進(jìn)行hash
Cache A、Cache B,Cache C為三臺Memcached服務(wù)器
根據(jù)三臺Memcached的IP和端口,計算出他們的Hash值,然后分布在整個圓環(huán)上
每兩臺Memcached服務(wù)器的Hash值之間為一個區(qū)間
Key1、Key2、Key3、Key4
為要存儲在Memcached里的4個Key
根據(jù)4個Key計算出他們的Hash值,同樣也落在這個圓環(huán)上
在這個環(huán)形空間中,如果沿著順時針方向從對象的 key 值出發(fā),直到遇見一個 cache ,那么就將該對象存儲在這個 cache 上,因為對象和 cache 的 hash 值是固定的,因此這個 cache 必然是唯一和確定的。
根據(jù)上面的方法,對象 key1 將被存儲到 cache A 上; key2 和 key3 對應(yīng)到 cache C ; key4 對應(yīng)到 cache B;
同一個key不是三臺服務(wù)器上面都有映射, 只會映射到其中一臺服務(wù)器上面
集群中其中一個Memcached節(jié)點宕機,會導(dǎo)致存在著上面的Key全部失效而重新對這些key進(jìn)行hash
對其他活著的Memcached節(jié)點上的key沒有影響
如果是集群
Set和Get時觸發(fā)操作的是否為同一個配置
如果是多個應(yīng)用服務(wù)器觸發(fā)Set、Get操作,每一個的Memcached節(jié)點配置順序是否相同
可以通過telnet的方式,去Memcached節(jié)點上Get一下響應(yīng)的Key,看是否真的過期
你分析一下你的slab構(gòu)成,看看每個slab分配了多少page頁,加起來是不是跟總分配內(nèi)存一樣,如果是一樣的表示你的內(nèi)存已經(jīng)分配完了,每個slab只能使用已分配的大小,不能再增漲。再分析一下存這個value的slab的大小,如果比較小,且hits量很大,就會出現(xiàn)你這樣的情況,剛存沒多久的數(shù)據(jù)沒到過期就會被擠掉。
Set和Get時觸發(fā)操作的是否為同一個配置
如果是多個應(yīng)用服務(wù)器觸發(fā)Set、Get操作,每一個的Memcached節(jié)點配置順序是否相同
可以通過telnet的方式,去Memcached節(jié)點上Get一下響應(yīng)的Key,看是否真的過期
你分析一下你的slab構(gòu)成,看看每個slab分配了多少page頁,加起來是不是跟總分配內(nèi)存一樣,如果是一樣的表示你的內(nèi)存已經(jīng)分配完了,每個slab只能使用已分配的大小,不能再增漲。再分析一下存這個value的slab的大小,如果比較小,且hits量很大,就會出現(xiàn)你這樣的情況,剛存沒多久的數(shù)據(jù)沒到過期就會被擠掉。
失效就幾種可能:
1,cache滿了,剛插進(jìn)去就被lru剔出來
2,失效時間設(shè)置不對,導(dǎo)致數(shù)據(jù)一插進(jìn)去就失效(不能超過30天)
1,cache滿了,剛插進(jìn)去就被lru剔出來
2,失效時間設(shè)置不對,導(dǎo)致數(shù)據(jù)一插進(jìn)去就失效(不能超過30天)
使用了64的操作系統(tǒng),能分配2GB以上的內(nèi)存。32位操作系統(tǒng)中,每個進(jìn)程最多只能使用2GB內(nèi)存。可以啟動多個分配2GB以下內(nèi)存的進(jìn)程,但這樣一臺服務(wù)器上的TCP連接數(shù)就會成倍增加,管理上也變得復(fù)雜,所以盡量統(tǒng)一使用了64位操作系統(tǒng)。
另外,最好分配內(nèi)存為3GB,是因為內(nèi)存分配量超過這個值,就有可能導(dǎo)致內(nèi)存交換(swap),memcached的內(nèi)存存儲“slab”, memcached啟動時指定的內(nèi)存分配量是memcached用于保存數(shù)據(jù)的量,沒有包括“slab”本身占用的內(nèi)存、以及為了保存數(shù)據(jù)而設(shè)置的管理空間。因此,memcached進(jìn)程的實際內(nèi)存分配量要比指定的容量要大。
如果在memcached中的數(shù)據(jù)大部分都比較小。這樣,進(jìn)程的大小要比指定的容量大很多。因此,改變內(nèi)存分配量進(jìn)行驗證,確認(rèn)了3GB的大小不會引發(fā)swap。
另外,最好分配內(nèi)存為3GB,是因為內(nèi)存分配量超過這個值,就有可能導(dǎo)致內(nèi)存交換(swap),memcached的內(nèi)存存儲“slab”, memcached啟動時指定的內(nèi)存分配量是memcached用于保存數(shù)據(jù)的量,沒有包括“slab”本身占用的內(nèi)存、以及為了保存數(shù)據(jù)而設(shè)置的管理空間。因此,memcached進(jìn)程的實際內(nèi)存分配量要比指定的容量要大。
如果在memcached中的數(shù)據(jù)大部分都比較小。這樣,進(jìn)程的大小要比指定的容量大很多。因此,改變內(nèi)存分配量進(jìn)行驗證,確認(rèn)了3GB的大小不會引發(fā)swap。
64位操作系統(tǒng)不受限制(小于你的物理內(nèi)存大小即可),不過得注意Memcache軟件本身是有內(nèi)存消耗的(相比可以忽略),但這點還是注意一下。