Memcached是什麼?
Memcached的特征
a.協定簡單,Memcached使用簡單的文本行協定
b.基于libevent的事件處理
c.内置記憶體存儲方式
d.每個Memcached伺服器之間互不通信
e.Memcached使用key-value的方式進行儲存
Libevent 已經被廣泛的應用,作為底層的網絡庫;比如 memcached、 Vomit、 Nylon、 Netchat等等。
Memcached的記憶體存儲
由于傳統的記憶體配置設定使用malloc函數和free函數進行記憶體配置設定,導緻記憶體産生的大量的記憶體碎片,無法被利用。
Memcached采用Slab Allocator實作記憶體的配置設定。
Slab Allocator的原理:按照預先規定将記憶體配置設定成大小特定且不等的記憶體快(chunk),并把大小相等的記憶體快組織成組(slab class)。
Memcached如何通過Slab Allocator實作資料的緩存?
當一個資料到達Memcached時,Memcached根據資料的大小去選擇大小适宜的slab,在通過chunk的空閑清單,選中出chunk将資料緩存上去。
Memcached在配置設定記憶體過程中怎麼實作不等長的記憶體劃分呢?
Memcached在啟動時會指定growth factor因子,來控制每個slab之間的差異,并不是随意進行劃分的。如:growth factor因子為2,前一個slab class中的每個chunk的大小為2,則下一個slab class中的每一個chunk的大小為4,就這樣一次類推。預設Memcahed設定中growth factor的值為1.25
Memcached的逾時原理
Memcached怎麼去監控自己在記憶體中緩存的資源是否過期,其采用Lazy Expiration,Memcached不會自動的去監控并檢測緩存在記憶體中的内容是否過期,當一個請求到來時,Memcached才會去檢查請求資源的記錄時間戳,檢查記錄是否過期,如沒有過期再進行傳回。
Memcached的删除的原理
Memcached的分布式排程

假如web伺服器要緩存一個資料庫到Memcached伺服器,那麼要緩存在那個上呢?
其實Memcached API提供了幾個排程算法
a.餘數計算:
把将要緩存在Memcached上的記錄的key值進行C32計算,再将計算結果與node數+1進行取餘,得到的結果就是此資料要緩存的Memcached伺服器。
缺點:
當進行增加或者移除節點時,緩存資料進行重組,無法擷取與儲存時相同的伺服器,進而影響緩存的命中率。
b.Consistent hash:
将node節點的主機名進行HASH計算,并配置在0~2^23的圓上,再将資源的key值進行HASH計算,并映射在圓上,從映射位置順時針查找,找到的第一個伺服器就将資料儲存在此伺服器上。
Memcached的安裝方式
Memcached的啟動
Memcached狀态查詢
使用zabbix監聽memcached
監聽資料:命中多少,總過多少資源,多少次擷取,多少次進行添加,讀取位元組書,寫入位元組數
1.在Memached的主機上安裝zabbix
2.在另一台主機上安裝zabbix-server并啟動在web頁面進行配置
configure->host->item(memcached host)
定義item:
定義Graphs
本文轉自lnsaneLlinux部落格51CTO部落格,原文連結http://blog.51cto.com/lnsane784/1928524如需轉載請自行聯系原作者
Insane_linux