memcache讀書筆記(二)

Memcached的內存算法:

slab allocation機制
Memcached利用slab allocation機制來分配和管理內存,它按照預先規定的⼤小, 將分配的內存分割成特定⻓長度的內存塊,再把尺寸相同的內存塊分成組,數據在存放時,根據鍵值 ⼤小去匹配slab⼤小,找就近的slab存放,所以存在空間浪費現象。

傳統的內存管理⽅式是,使⽤用完通過malloc分配的內存後通過free來回收內存,這種⽅式容易產生內存碎片並降低操作系統對內存的管理效率。
這裏寫圖片描述

查看memcached的內部狀態

stats命令
stats slabs:輸出slab中更詳細的item信息
stats items:輸出各個slab中的item信息。
stats sizes:輸出所有item的⼤小和個數

Memcached的緩存策略:

Memcached的緩存策略是LRU(最近最少使⽤用)加上到期失效策略。當你在
memcached內存儲數據項時,你有可能會指定它在緩存的失效時間,默認爲永久。當memcached服務器⽤用完分配的內存時,失效的數據被首先替換,然後也是最近未使⽤的數據。在LRU中,memcached使⽤的是一種Lazy Expiration策略,⾃己不會監控存入的key/vlue對是否過期,⽽是在獲取key值時查看記錄的時間戳,檢查key/value對空間是否過期,這樣可減輕服務器的負載。

Memcached的分佈式算法:

當向memcached集羣存入/取出key/value時,memcached客戶端程序根據一定的算法計算存入哪臺服務器,然後再把key/value值存到此服務器中。也就是說,存取數據分二步走:第一步,選擇服務器;第二步,存取數據。
分佈式算法(Consistent Hashing):
選擇服務器算法有兩種,一種是根據餘數來計算分佈,另一種是根據散列算法來計算分佈。
餘數算法:
先求得鍵的整數散列值,再除以服務器臺數,根據餘數確定存取服務器,這種方法計算簡單,高效,但在memcached服務器增加或減少時,幾乎所有的緩存都會失效。
散列算法:
先算出memcached服務器的散列值,並將其分佈到0到2的32次方的圓上,然後用同樣的方法算出存儲數據的鍵的散列值並映射至圓上,最後從數據映射到的位置開始順時針查找,將數據保存到查找到的第一個服務器上,如果超過2的32次方,依然找不到服務器,就將數據保存到第一臺memcached服務器上。如果添加了一臺memcached服務器,只在圓上增加服務器的逆時針方向的第一臺服務器上的鍵會受到影響。

Memcache的管理與性能監控:

    可以通過命令行直接管理與監控也可通過nagios、cacti等web軟件進行監控

命令行:

Stats:統計memcached的各種信息 
Stats reset:重新統計數據 
Stats slabs,顯示slabs信息,可以詳細看到數據的分段存儲情況 
Stats items:顯示slab中的item數目 
Stats cachedump 1 0:列出slabs第一段裏存的KEY值 
Set|get:保存或獲取數據 
STAT evictions 0:表示要騰出新空間給新的item而移動的合法item數目

其它常用軟件使用:

Shell>./Memcached-tool 127.0.0.1:11211 
Shell>./Memcached-tool 127.0.0.1:11211 display 

Web軟件:

1   Memcache.php 
2   Nagios插件 
3   Cacti模塊

Memcached與redis比較:

這裏寫圖片描述

發佈了41 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章