memcached總結

分佈式緩存出於以下考慮,首先是緩存自己的水平線性擴展問題,其次是緩存大併發下的本身的性能問題,再次避免緩存的單點故障問題(多副本和副本一致性)。分布式緩存術包括首先是內存自己的管理問題,包括了內存的分配,管理和回收機制。其次是分佈式管理和分佈式算法,其次是緩存鍵值管理和路由。 算法

什麼是Memcached
許多Web 應用程序都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。但隨着數據量的增大,訪問的集中,就會出現REBMS的負擔加劇,數據庫響應惡化,網站顯示延遲等重大影響。Memcached是高性能的分佈式內存緩存服務器。通常的使用目的是經過緩存數據庫詢結果,減小數據庫的訪問次數,以提升動態Web 應用的速度、提升擴展性。 數據庫

Memcached做爲高速運行的分佈式緩存服務器具備如下特色。 緩存

  • 協議簡單:memcached的服務器客戶端通訊並不使用複雜的MXL等格式,而是使用簡單的基於文本的協議。
  • 基於libevent的事件處理:libevent是個程序庫,他將Linux 的epoll、BSD類操做系統的kqueue等時間處理功能封裝成統一的接口。memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。
  • 內置內存存儲方式:爲了提升性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。因爲數據僅存在於內存中,所以重啓memcached,重啓操做系統會致使所有數據消失。另外,內容容量達到指定的值以後memcached回自動刪除不適用的緩存。
  • Memcached不互通訊的分佈式:memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。各個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)獲取到新空間時,就從最近未使用的記錄中搜索,並將空間分配給新的記錄。 服務器

緩存多副本主要是用於在緩存數 據存放時 存儲緩存數 據的多個副 ,以防止 緩存失效。緩存失 效發生在以 下幾種狀況:
  • 1.    緩存超時被移除(正常失效)
  • 2.    緩存因爲存儲空間限制被移除(異常失效)
  • 3.    因爲緩存節點變化而致使的緩存失效(異常失效)
在緩存多副本的狀況下,須要從新考慮緩存的分佈式分佈策略。其次緩存的多個 副本實際自己是可能的多個讀的節點,能夠作爲分佈式的並行讀,這是另一個能夠考慮的問題。

緩存數據的一致性問題

緩存數據儘可能只讀,所以緩存自己是不適合大 量寫和更新 操做的 據場景的。對 於讀的狀況下,若是存在數據變化,一種是同時更新緩存和數據庫。一種是直接對緩 存數據進行失效 處理。

 

一、客戶端在與 memcached 服務創建鏈接以後,進行存取對象的操做,每一個被存取的對象都有一個惟一的標識符 key,存取操做均經過這個 key 進行,保存到 memcached 中的對象其實是放置內存中的,並非保存在 cache 文件中的,這也是爲何 memcached 可以如此高效快速的緣由。注意,這些對象並非持久的,服務中止以後,裏邊的數據就會丟失。 併發

二、當存入cached的數據超過了cached的容量後會將最長時間沒調用的對象擠出,這正好應徵了cached的特徵。 分佈式

三、利用memcached經常使用的作法:在每取得一次cached對象後,從新設置這個對象的cache時間,這樣可以使得常常被調用的對象能夠長期滯留在緩存中,使得效率增倍。 memcached

相關文章
相關標籤/搜索