1. 程式人生 > >memcached的學習(1)

memcached的學習(1)

2018.6.11

1、memcached是什麼?

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 為首開發的一款軟體。現在已成為 mixi、 hatena、 Facebook、 Vox、LiveJournal等眾多服務中 提高Web應用擴充套件性的重要因素。

許多Web應用都將資料儲存到RDBMS中,應用伺服器從中讀取資料並在瀏覽器中顯示。 但隨著資料量的增大、訪問的集中,就會出現RDBMS的負擔加重、資料庫響應惡化、 網站顯示延遲等重大影響。

這時就該memcached大顯身手了。memcached是高效能的分散式記憶體快取伺服器。 一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、 提高可擴充套件性。


在這裡插入圖片描述

2、memcached的特徵

memcached作為高速執行的分散式快取伺服器,具有以下的特點。

● 協議簡單
● 基於libevent的事件處理
● 內建記憶體儲存方式
● memcached不互相通訊的分散式

協議簡單

memcached的伺服器客戶端通訊並不使用複雜的XML等格式, 而使用簡單的基於文字行的協議。因此,通過telnet 也能在memcached上儲存資料、取得資料。

下面是例子。

$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 0 0 3     (儲存命令)
bar               (資料)
STORED            (結果)
get foo           (取得命令)
VALUE foo 0 3     (資料)
bar               (資料)

協議文件位於memcached的原始碼內,也可以參考以下的URL。
http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

基於libevent的事件處理

libevent是個程式庫,它將Linux的epoll、BSD類作業系統的kqueue等事件處理功能 封裝成統一的介面。即使對伺服器的連線數增加,也能發揮O(1)的效能。 memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等作業系統上發揮其高效能。 關於事件處理這裡就不再詳細介紹,可以參考Dan Kegel的The C10K Problem。

● libevent: http://www.monkey.org/~provos/libevent/
● The C10K Problem: http://www.kegel.com/c10k.html

內建記憶體儲存方式

為了提高效能,memcached中儲存的資料都儲存在memcached內建的記憶體儲存空間中。 由於資料僅存在於記憶體中,因此重啟memcached、重啟作業系統會導致全部資料消失。 另外,內容容量達到指定值之後,就基於LRU(Least Recently Used)演算法自動刪除不使用的快取。 memcached本身是為快取而設計的伺服器,因此並沒有過多考慮資料的永久性問題。 關於記憶體儲存的詳細資訊,本連載的第二講以後前阪會進行介紹,請屆時參考。

memcached不互相通訊的分散式

memcached儘管是“分散式”快取伺服器,但伺服器端並沒有分散式功能。 各個memcached不會互相通訊以共享資訊。那麼,怎樣進行分散式呢? 這完全取決於客戶端的實現。本連載也將介紹memcached的分散式。
在這裡插入圖片描述