一、概念
Memcached是一個開源的,高性能的內存緩存軟件,從名稱上看Mem就是內存,二cache是緩存。作用通過在事先規劃好的內存空間中臨時緩存數據庫中的各類數據,以達到減少業務對數據庫的直接高并發訪問,從而達到提升數據庫的訪問性能,加速網站集群動態應用服務的能力。
應用場景:
1、作為數據庫的前端緩存應用
a、完整緩存(易),靜態緩存
b、熱點緩存(難)
2、作業集群的session會話共享存儲
二、Memcached服務分布式集群實現
1、程序端實現,程序加載所有mc的ip列表,通過對key做hash算法
2、負載均衡器,通過對key做hash,一致哈希算法的目的是不但保證每個對象只請求一個對應的服務器,而且當節點宕機,緩存服務器的更新重新分配比例降到最低
三、Memcached服務特點及工作原理
1、完全基于內存緩存的
2、節點之間相互獨立
3、C/S模式機構、C語言編寫
4、異步I/O模型,使用libevent作為事件通知機制
5、被緩存的數據以key/value鍵值對形式存在的
6、全部數據存放于內存中,無持久性存儲的設計,重啟服務器,內存里的數據會丟失
7、當內存中的緩存的數據容量達到啟動時設定的內存值時,就自動使用LRU算法刪除過期的緩存數據
8、可以對存儲的數據設置過期時間,過期后的數據自動被清除,服務本身不會監控過期,而且在訪問的時候查看key的時間戳,判斷是否過期
9、Memcache會對設定的內存進行分開,再把塊分組,然后再提供服務
四、Memcached內存管理機制原理
利用 Slab Allocation 機制來分配和管理內存。Slab Allocation 機制原理是按照預先規定的大小,將分配給 memcached 的內存分割成特定長度的內存塊(chunk),再把尺寸相同的內存塊,分成組(chunks slab class),這些內存塊不會釋放,可以重復利用。
五、Memcached工作
Memcached 的神奇來自兩階段哈希(two-stage hash)。Memcached 就像一個巨大的、存儲了很多<key,value>對的哈希表。通過 key,可以存儲或查詢任意的數據。客戶端可以把數據存儲在多臺memcached 上。當查詢數據時,客戶端首先參考節點列表計算出 key 的哈希值(階段一哈希),進而中一個節點;客戶端將請求發送給選中的節點,然后 memcached 節點通過一個內部的哈希算法(階段二
哈希),查找真正的數據(item)。
六、Memcached最大優勢
Memcached 最大的好處就是它帶來了極佳的水平可擴展性,特別是在一個巨大的系統中。由于客戶端自己做了一次哈希,那么我們很容易增加大量 memcached到集群中。memcached 之間沒有相互通信,因此不會增加 memcached 的負載;沒有多播協議,不會網絡通信量爆炸(implode)。memcached 的集群很好用。內存不夠了?增加幾臺 memcached 吧;CPU 不夠用了?再增加幾臺吧;有多余的內存?在增加幾臺吧,不要浪費了。基于 memcached 的基本原則,可以相當輕松地構建出不同類型的緩存架構。
七、Memcached和服務器的local cache相比的優缺點
首先,local cache 有許多與上面(query cache)相同的問題。local cache 能夠利用的內存容量受到(單臺)服務器空閑內存空間的限制。不過,local cache 有一點比 memcached 和 query cache 都要好,那就是它不但可以存儲任意的數據,而且沒有網絡存取的延遲。
local cache 的數據查詢更快。考慮把 highly common 的數據放在 localcache 中吧。如果每個頁面都需要加載一些數量較少的數據,考慮把它們放在local cached 吧。
local cache 缺少集體失效(groupinvalidation)的特性。在 memcached 集群中,刪除或更新一個 key 會讓所有的觀察者覺察到。但是在local cache中, 我們只能通知所有的服務器刷新cache(很慢,不具擴展性),或者僅僅依賴緩存超時失效機制。
八、Memcached的cache機制
Memcached 主要的 cache 機制是 LRU(最近最少用)算法+超時失效。當您存數據到 memcached 中,可以指定該數據在緩存中可以呆多久 Which is forever,or some time in the future。如果 memcached 的內存不夠用了,過期的 slabs會優先被替換,接著就輪到最老的未被使用的 slabs。