分佈式緩存出於以下考慮,首先是緩存自己的水平線性擴展問題,其次是緩存大併發下的本身的性能問題,再次避免緩存的單點故障問題(多副本和副本一致性)。分布式緩存的核心技術包括首先是內存自己的管理問題,包括了內存的分配,管理和回收機制。其次是分佈式管理和分佈式算法,其次是緩存鍵值管理和路由。 算法
什麼是Memcached
許多Web 應用程序都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。但隨着數據量的增大,訪問的集中,就會出現REBMS的負擔加劇,數據庫響應惡化,網站顯示延遲等重大影響。Memcached是高性能的分佈式內存緩存服務器。通常的使用目的是經過緩存數據庫查詢結果,減小數據庫的訪問次數,以提升動態Web 應用的速度、提升擴展性。 數據庫
Memcached做爲高速運行的分佈式緩存服務器具備如下特色。 緩存
Memcached的內存管理
最近的memcached默認狀況下采用了名爲Slab Allocatoion的機制分配,管理內存。在改機制出現之前,內存的分配是經過對全部記錄簡單地進行malloc和free來進行的。可是這中方式會致使內存碎片,加劇操做系統內存管理器的負擔。
Slab Allocator的基本原理是按照預先規定的大小,將分配的內存分割成特定長度的塊,已徹底解決內存碎片問題。Slab Allocation 的原理至關簡單。將分配的內存分割成各類尺寸的塊(chucnk),並把尺寸相同的塊分紅組(chucnk的集合)。
Memcached刪除數據時數據不會真正從memcached中消失。Memcached不會釋放已分配的內存。記錄超時後,客戶端就沒法再看見該記錄(invisible 透明),其存儲空間便可重複使用。
Lazy Expriationmemcached內部不會監視記錄是否過時,而是在get時查看記錄的時間戳,檢查記錄是否過時。這種技術稱爲lazy expiration.所以memcached不會再過時監視上耗費CPU時間。
對於緩存存儲容量滿的狀況下的刪除須要考慮多種機制,一方面是按隊列機制,一方面應該對應緩存對象自己的優先級,根據緩存對象的優先級進行對象的刪除。
LRU:從緩存中有效刪除數據的原理:
Memcached會優先使用已超時的記錄空間,但即使如此,也會發生追加新紀錄時空間不足的狀況。此時就要使用名爲Least Recently Used (LRU)機制來分配空間。這就是刪除最少使用的記錄的機制。所以當memcached的內存空間不足時(沒法從slab class)獲取到新空間時,就從最近未使用的記錄中搜索,並將空間分配給新的記錄。 服務器
一、客戶端在與 memcached 服務創建鏈接以後,進行存取對象的操做,每一個被存取的對象都有一個惟一的標識符 key,存取操做均經過這個 key 進行,保存到 memcached 中的對象其實是放置內存中的,並非保存在 cache 文件中的,這也是爲何 memcached 可以如此高效快速的緣由。注意,這些對象並非持久的,服務中止以後,裏邊的數據就會丟失。 併發
二、當存入cached的數據超過了cached的容量後會將最長時間沒調用的對象擠出,這正好應徵了cached的特徵。 分佈式
三、利用memcached經常使用的作法:在每取得一次cached對象後,從新設置這個對象的cache時間,這樣可以使得常常被調用的對象能夠長期滯留在緩存中,使得效率增倍。 memcached