Memcached特性、優勢和限制

這裏須要說明,不少開發者以爲 Memcached 是一種分佈式 Cache ,但其實 Memcached 服務端自己是單實例的,只是在客戶端實現過程當中能夠根據存儲的主鍵做分區存儲,而這個區就是 Memcached 服務端的一個或者多個實例,若是將客戶端也囊括到 Memcached 中,那麼能夠部分概念上說是集中式的。集中式的構架,無非兩種狀況: 1. 節點均衡的網狀( JBoss Tree Cache ),利用 JGroup 的多播通訊機制來同步數據。 2.Master-Slaves 模式(分佈式文件系統),由 Master 來管理 Slave ,如何選擇 Slave ,如何遷移數據,都是由 Master 來完成,可是 Master 自己也存在單點問題。數據庫

特性、優勢和限制緩存

Memory :內存存儲,速度快,對於內存的要求高,所緩存的內容非持久化。對於 CPU 要求很低,因此經常採用將 Memcached 服務端和一些 CPU 高消耗 Memory 低消耗應用部屬在一塊兒 。(不然會互相擠佔資源)框架

集中式 Cache :避開了分佈式 Cache 的傳播問題,可是須要非單點保證其可靠性,這須要 cluster 的工做,能夠將多個 Memcached 做爲一個虛擬的 cluster ,同時對於 cluster 的讀寫和普通的 memcached 的讀寫性能沒有差異。異步

分佈式擴展: Memcached 很突出的一個優勢,就是採用了可分佈式擴展的模式。能夠將部屬在一臺機器上的多個 Memcached 服務端或者部署在多個機器上的 Memcached 服務端組成一個虛擬的服務端,對於調用者來講徹底屏蔽和透明。提升的單機器的內存利用率 。分佈式

Socket 通訊:傳輸內容的大小以及序列化的問題須要注意,雖然 Memcached 一般會被放置到內網做爲 Cache, Socket 傳輸速率應該比較高(當前支持 Tcp 和 udp 兩種模式,同時根據客戶端的不一樣能夠選擇使用 nio 的同步或者異步調用方式),可是序列化成本和帶寬成本仍是須要注意。這裏也提一下序列化,對於對象序列化的性能每每讓你們頭痛,可是若是對於同一類的 Class 對象序列化傳輸,第一次序列化時間比較長,後續就會優化,其實也就是說序列化最大的消耗不是對象序列化,而是類的序列化。若是穿過去的只是字符串,那麼是最好的,省去了序列化的操做,所以在 Memcached 中保存的每每是較小的內容 。memcached

特殊的內存分配機制:首先要說明的是 Memcached 支持最大的存儲對象爲 1M (page)。它的內存分配比較特殊,可是這樣的分配方式其實也是對於性能考慮的,簡單的分配機制能夠更容易回收再分配,節省對於 CPU 的使用(前面的文章中有描述) 。性能

Cache 機制簡單: 首先它沒有什麼同步,消息分發,兩階段提交等等,它就是一個很簡單的 Cache ,把東西放進去,而後能夠取出來,若是發現所提供的 Key 沒有命中,那麼就很直白的告訴你,你這個 key 沒有任何對應的東西在緩存裏,去數據庫或者其餘地方取,當你在外部數據源取到的時候,能夠直接將內容置入到 Cache 中,這樣下次就能夠命中了 。這裏會提到怎麼去同步這些數據,兩種方式,一種就是在你修改了之後馬上更新 Cache內容,這樣就會即時生效。另外一種是說允許有失效時間,到了失效時間,天然就會將內容刪除,此時再去去的時候就會命中不了,而後再次將內容置入 Cache ,用來更新內容。後者用在一些時時性要求不高,寫入不頻繁的狀況。優化

客戶端的重要性: 客戶端設計的合理十分重要,同時也給使用者提供了很大的空間去擴展和設計客戶端來知足各類場景的須要,包括容錯,權重,效率,特殊的功能性需求,嵌入框架等等。spa

幾個應用點:小對象的緩存(用戶的 token ,權限信息,資源信息)。小的靜態資源緩存。 Sql 結果的緩存(這部分用的好,性能提升至關大。)設計

相關文章
相關標籤/搜索