Memcache介紹與應用場景


一:概念介紹

        Memcache是一個高性能的分布式的內存對象緩存系統,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度(即用於在動態應用中減少數據庫負載,提升訪問速度)。
        Memcache是以守護進程方式運行於一個或多個服務中,隨時會接收客戶端的連接和操作。
        Memcached是一種無阻塞的socket通信方式服務,基於libevent庫,由於無阻塞通信,對內存讀寫速度非常之快。
        Memcached分服務器端和客戶端,可以配置多個服務器端和客戶端,應用於分布式的服務非常廣泛。
        Memcached是鍵值一一對應,key默認最大不能超過128個字 節,value默認大小是1M,也就是一個slabs,如果要存2M的值(連續的),不能用兩個slabs,因為兩個slabs不是連續的,無法在內存中 存儲,故需要修改slabs的大小,多個key和value進行存儲時,即使這個slabs沒有利用完,那么也不會存放別的數據。

二:特點

1、高性能

         無論哪一種數據庫dbms(mysql,oracle,mssql,db2,Postgres等等),再怎么優化,最終也避不開與慢速的存儲介質(硬盤、磁帶)進行數據交換,但往往一旦涉及到了存儲介質的io操作,存取性能就會急劇下降。memcached,顧名思義,它的全部操作自始至終都是在內存中進行的,所以存取數據的效率非常高。
        通常情況下,大型網站對於數據庫的操作都會做優化。通常的手段有兩種:
        a、讀寫數據分離,采用主/輔庫的方式,來分散數據庫的壓力,提高查詢速度。
        b、按照業務特點橫向或者縱向分割數據庫。簡單來講,就是大庫變小庫,大表變小表,來提高數據庫訪問的效率。一般來講,一個數據庫具有很多表或者一張表有N多的記錄,都會明顯的降低數據庫的服務能力,比如mysql數據庫單表記錄達到2000萬條左右(筆者以前的工作經驗),性能會下降到幾乎無法忍受。
        數據庫會在以下情況下會出現訪問瓶頸:
        a、事務操作
        企業級的數據庫(比如mysql的innodb模式)都支持事務操作。由於事務具有原子性,事務中涉及的數據表在運行過程中將會加鎖。在這種情況下,訪問這些表的數據會出現延遲。
        b、數據更新
        數據庫中任何的表在數據更新過程中,同樣會被加鎖。在這種情況下,也會出現上面同樣的結果。

2、分布式

        一種計算機硬件的配置方式和相應的功能配置方式。它是一種多處理器的計算機系統,各處理器通過互連網絡構成統一的系統。系統采用分布式計算結構,即把原來系統內中央處理器處理的任務分散給相應的處理器,實現不同功能的各個處理器相互協調,共享系統的外設與軟件。這樣就加快了系統的處理速度,簡化了主機的邏輯結構。
        memcache的分布式特性主要表現在兩個方面:
        a.memcache客戶端mc和服務器端ms可以單獨安裝在任何獨立server上。
        當然部署在同一台server上也沒問題,甚至於一台機器上可以部署n個memcached。
        b.memcache服務器端ms可以安裝在任意數量的server上,提供並行存儲和計算的能力。
        這是分布式特性的本質體現。ms可以形成任意多台server組成的集群,為mc提供服務。

三:工作機制

        Memcached 是以守護程序方式運行於一個或多個服務器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客戶端首先與 Memcached 服務建立連接,然后存取對象。每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存的時候還可以設置有效期。保存在 Memcached 中的對象實際上是放置在內存中的,而不是在硬盤上。Memcached 進程運行之后,會預申請一塊較大的內存空間,自己進行管理,用完之后再申請一塊,而不是每次需要的時候去向操作系統申請。Memcached將對象保存在一個巨大的Hash表中,它還使用NewHash算法來管理Hash表,從而獲得進一步的性能提升。所以當分配給Memcached的內存足夠大的時候, Memcached的時間消耗基本上只是網絡Socket連接了。
        Memcached按照LRU方式調度數據。LRU是Least Recently Used的縮寫,即最近最少使用頁面置換算法,是為虛擬頁式存儲管理服務的。LRU算法在實際的工作環境中會與操作系統相關,所現在都使用X64位系統。

四、Memcached刪除機制

        Memcached並沒有過期監控,它是標記刪除,只要內存沒有被重復使用,即使過期了,數據也會存在於內存之中,只是在get時檢測過期時間,如果當前時間大於有效期,就直接返回false。

五、應用場景

1、分布式應用。

        由於memcached本身基於分布式的系統,所以尤其適合大型的分布式系統。

2、數據庫前段緩存。

        數據庫常常是網站系統的瓶頸。數據庫的大並發量訪問,常常造成網站內存溢出。當然我們也可以使用Hibernate的緩存機制。但memcached是基於分布式的,並可獨立於網站應用本身,所以更適合大型網站進行應用的拆分。

3、服務器間數據共享。

         舉例來講,我們將網站的登錄系統、查詢系統拆分為兩個應用,放在不同的服務器上,並進行集群,那這個時候用戶登錄后,登錄信息如何從登錄系統服務器同步到查詢系統服務器呢?這時候,我們便可以使用memcached,登錄系統將登錄信息緩存起來,查詢系統便可以獲得登錄信息,就像獲取本地信息一樣。

不適合應用的場景:

1、緩存的數據量比較小。
2、緩存的數據需要持久化。

六、用途

1、提高系統的並發能力
2、減輕數據庫的負擔
這兩種用途其實非常容易理解。由於memcached高性能,所以可以同時服務於更多的連接,大大提高了系統的並發處理的能力。另外,memcached通常部署在業務邏輯層(前台應用)和存儲層(主指數據庫)之間,作為數據庫和前台應用的數據緩沖,因此可以快速的響應前端的請求,減少對數據庫的訪問。





























免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM