http://www.cnblogs.com/yinrq/p/5013742.htmlhtml
你們可能對memcached這種產品早有了解,或者已經應用在本身的網站中了,可是也有一些朋友歷來都沒有據說過或者使用過。
這都沒什麼關係,本文旨在從各個角度綜合的介紹這種產品,儘可能深刻淺出,若是能對您如今或之後的工做有所幫助,筆者將感到無比榮幸。mysql
Memcached概念、做用、運行原理、特性、不足簡單梳理(1)git
Memcached下載安裝、NET對Memcached進行CRUD操做(2)github
Memcached存Session數據、訪問安全性、使用場景總結(3)web
官方解釋以下:算法
What is Memcached? Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering. Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.
Memcached 是一個開源、高性能、分佈式內存對象緩存系統。sql
官網地址:http://memcached.org/數據庫
下載地址:http://www.memcached.org/files/memcached-1.4.25.tar.gz緩存
Memcache和Memcached到底有什麼區別?安全
Memcache 是 danga.com 的一個項目,最先是爲 LiveJournal 服務的,目前全世界很多人使用這個緩存項目來構建本身大負載的網站,來分擔數據庫的壓力。
Memcached 是一個開源、高性能、分佈式內存對象緩存系統
Memcache 是這個項目的名稱,而 memcached 是它服務器端的主程序文件名
Memcached 是以守護程序方式運行於一個或多個服務器中,隨時接受客戶端的鏈接操做。客戶端首先與 Memcached 服務創建鏈接,而後存取對象。保存在 Memcached 中的對象是放置在內存中的,而不是在硬盤上。
Memcached 進程運行以後,會預申請一塊較大的內存空間,本身進行管理,用完以後再申請,不是每次須要的時候去向操做系統申請。Memcached將對象保存在一個巨大的Hash表中,它還使用NewHash算法來管理Hash表,從而得到進一步的性能提高。因此當分配給Memcached的內存足夠大的時候,Memcached的時間消耗基本上只是網絡Socket鏈接了。
總之,Memcached用於動態Web應用以減輕數據庫負載。它經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升動態、數據庫驅動網站的速度。
Memcached處理的原子是每個(key,value)對(如下簡稱kv對),key會經過一個hash算法轉化成hash-key,便於查找、對比以及作到儘量的散列。同時,memcached用的是一個二級散列,經過一張大hash表來維護。
Memcached有兩個核心組件組成:服務端(Server)和客戶端(Client),在一個memcached的查詢中,Client先經過計算key的hash值來肯定kv對所處在的Server位置。當Server肯定後,客戶端就會發送一個查詢請求給對應的Server,讓它來查找確切的數據。由於這之間沒有交互以及多播協議,因此 memcached交互帶給網絡的影響是最小化的。
一、開源
開源地址:https://github.com/memcached/memcached/wiki
二、高性能
不管哪種數據庫(oracle,mssql,mysql,db2……),再怎麼優化,最終也避不開與慢速的硬盤進行數據交換,但每每一旦涉及到了硬盤的io操做,存取性能就會急劇降低。而Memcached的所有操做自始至終都是在內存中進行的,因此存取數據的效率很是高。
固然,大型網站對於數據庫的操做都會作優化(讀寫分離,按照業務分庫分表)。
三、分佈式
分佈式系統網上比較專業的解釋是:一種計算機硬件的配置方式和相應的功能配置方式。它是一種多處理器的計算機系統,各處理器經過互連網絡構成統一的系統。系統採用分佈式計算結構,即把原來系統內中央處理器處理的任務分散給相應的處理器,實現不一樣功能的各個處理器相互協調,共享系統的外設與軟件。這樣就加快了系統的處理速度,簡化了主機的邏輯結構。
Memcache的分佈式特性主要表現是:Memcached服務器端能夠安裝在任意數量的server上,提供並行存儲和計算的能力;Memcached客戶端和服務器端能夠單獨安裝在任何獨立server上。
一、數據是保存在內存當中的,一旦服務進程重啓,數據會所有丟失
對策:能夠採起更改Memcached的源代碼,增長按期寫入硬盤的功能
二、Memcached以root權限運行,並且Memcached自己沒有任何權限管理和認證功能,安 全性不足
對策:能夠將Memcached服務綁定在內網IP上,經過防火牆進行防禦