Memcached介紹

1、介紹

Memcached是一個開源的、支持高性能,高併發的分佈式內存緩存系統。

Memcached的做用
傳統場景中,多數Web應用都將數據保存到關係型數據庫中(例如: MySQL),Web服務器從中讀取數據並在瀏覽器中顯示。但隨着數據量的增大、訪問的集中,關係型數據庫的負擔就會出現加劇、響應緩慢、致使網站打開延遲等問題,影響用戶體驗。
這時就須要 Memcached軟件出馬了。使用 Memcached的主要目的是,經過在自身內存中緩存關係型數據庫的査詢結果,減小數據庫被訪問的次數,以提升動態Web應用的速度、提升網站架構的併發能力和可擴展性。
Memcached服務的運行原理是經過在事先規劃好的系統內存空間中臨時緩存數據庫中的各種數據,以達到減小前端業務服務對數據庫的直接高併發訪問,從而提高大規模網站集羣中動態服務的併發訪問能力。
生產場景的 Memcached服務通常被用來保存網站中常常被讀取的對象或數據,就像咱們的客戶端瀏覽器也會把常常訪問的網頁緩存起來同樣,經過內存緩存來存取對象或數據要比磁盤存取快不少,由於磁盤是機械的,所以,在當今的IT企業中,Memcached的應用範圍很普遍。

常見的內存緩存服務軟件以下:前端

2、Memcached在企業中的應用場景

一、做爲數據庫的查詢數據緩存web

(1)完整數據緩存算法

 (2)熱點數據緩存數據庫

二、做爲集羣節點的session會話共享緩存瀏覽器

即把客戶端用戶請求多個前端應用服務集羣產生的session會話信息。同一存儲到一個Memcached緩存中。因爲session會話數據是存儲在內存中的,因此速度很快。緩存

3、Memcached的特色與工做機制

一、Memcached的特色
Memcached做爲高併發、高性能的緩存服務,具備以下特色:
(1)協議簡單。 Memcached的協議實現很簡單,採用的是基於文本行的協議,能經過telnet/nc等命令直接操做 Memcached服務存取數據。

(2)支持epol/ kqueue異步IO模型,使用 libevent做爲事件處理通知機制。簡單的說, libevent是一套利用C開發的程序庫,它將BSD系統的 kqueue、 Linux系統的epoll等事件處理功能封裝成一個接口,確保即便服務器端的鏈接數增長也能發揮很好的性能。 Memcached就是利用這個 libevent庫進行異步事件處理的。

(3)採用key/value鍵值數據類型。被緩存的數據以 key/value鍵值形式存在

(4)全內存緩存,效率高。 Memcached管理內存的方式很是高效,即所有的數據都存放於 Memcached服務事先分配好的內存中,無持久化存儲的設計,和系統的物理內存同樣,當重啓系統或 Memcached服務時,Memcached內存中的數據就會丟失。
         若是但願重啓後,數據依然能保留,那麼就能夠採用 Redis這樣的持久性內存緩存系統,更多的開源軟件見http://blog.51cto.com/oldboy/775056
         當內存中緩存的數據容量達到服務啓動時設定的內存值時,就會自動使用LRU算法刪除過時的緩存數據。也能夠在存放數據時對存儲的數據設置過時時間,這樣過時後數據就自動被清除, Memcached服務自己不會監控數據過時,而是在訪問的時候查看key的時間戳判斷是否過時。

(5)可支持分佈式集羣。
         Memcahced沒有像 MySQL那樣的主從複製方式,分佈式 Memcahced集羣的不一樣服務器之間是互不通訊的,每個節點都獨立存取數據,而且數據內容也不同。經過對web應用端的程序設計或者經過支持hash算法的負載均衡軟件,可讓 Memcached支持大規模海量分佈式緩存集羣應用。

二、Mecached工做原理與機制服務器

(1)Mecached工做原理網絡

    Memcached是一套相似C/S模式架構的軟件,在服務器端啓動Memcached服務守護進程,能夠指定監聽本地的P地址、端口號、併發訪問鏈接數,以及分配了多少內存來處理客戶端請求。
(2)Socket事件處理機制
    Memcached軟件是由C語言來實現的,所有代碼僅有2000多行,採用的是異步epoll/kqueue非阻塞I/o網絡模型,其實現方式是基於異步的 libevent事件單進程、單線程模式。使用libevent做爲事件通知機制,應用程序端經過指定服務器的IP地址及端口,就能夠鏈接 Memcached服務進行通訊
(3)數據存儲機制
    須要被緩存的數據以 key/value鍵值對的形式保存在服務器端預分配的內存區中每一個被緩存的數據都有惟一的標識key,操做 Memcached中的數據就是經過這個惟一標識的key進行的。緩存到 Memcached中的數據僅放置在 Memcached服務預分配的內存中,而非存儲在 Memcached服務器所在的磁盤上,所以存取速度很是快。
    因爲 Memcached服務自身沒有對緩存的數據進行持久化存儲的設計,所以,在服務器端的Memcached服務進程重啓以後,存儲在內存中的這些數據就會丟失。且當內存中緩存的數據容量達到啓動時設定的內存值時,也會自動使用LRU算法刪除過時的數據。
    開發 Memcached的初衷僅是經過內存緩存提高訪問效率,並無過多考慮數據的永久存儲問題。所以,若是使用 Memcached做爲緩存數據服務,要考慮數據丟失後帶來的問題,例如:是否能夠從新生成數據,還有,在高併發場合下緩存宕機或重啓會不會致使大量請求直接到數據庫,致使數據庫沒法承受,最終致使網站架構雪崩等.
(4)內存管理機制
    Memcached採用了以下機制
    採用sab內存分配機制
    採用LRU對象清除機制
    採用hash機制快速檢索item。
(5)多線程處理機制
    多線程處理時採用的是 pthread(POSIX)線程模式。
    若要激活多線程,可在編譯時指定:./configure--enable-threads
    鎖機制不夠完善。
    負載太重時,能夠開啓多線程(-t線程數爲CPU核數)。session

相關文章
相關標籤/搜索