【學習點滴-memcached】 分布式緩衝系統 Memcached 入門

來源:互聯網
上載者:User
本文是轉載,原文地址:http://www.geekso.com/post/494/

kekehu /技術資源

維基百科上對 Memcached 的介紹是一個分布式的緩衝系統, 但是 Memcachd 到底是什麼意思,有什麼作用呢?緩衝一般用來儲存一些經常被存取的資料和資源(例如:瀏覽器會將訪問過的網頁會話緩衝起來),因為通過緩衝來存取資料要比從磁碟存取同樣的資料要快得多。所以Memcached
顧名思義,意味著 “記憶體緩衝”,所有緩衝的內容都在伺服器的記憶體中。記憶體中的這些快取資料可以通過 API 的方式被存取。資料是以 key/value 的配對方式存在的,就像一個很大的 Hash 表。

分布式是 Memcached 的主要特性,所以你可以在多台伺服器上來安裝Memcached 來組建一個更大的快取服務器。這樣一來,Memcached
可以協助我們使資料庫的壓力降到最低, 從而我們可以構建出更快的、更具擴充性的 WEB 應用。圖一展示了 Memcache 如何與資料庫端協同工作的情況。

圖一:Memcache 如何和資料庫協同工作

Memcache 如何工作?

圖一展示的流程,相信有開發過資料庫應用的同學都不會陌生。我們來一步步的說明圖中發生了什麼事情:

  1. 檢查使用者請求的資料是緩衝中是否有存在,如果有存在的話,只需要直接把請求的資料返回,這時候跟資料庫就完全扯不上關係了。
  2. 如果請求的資料在緩衝中找不到,這時候再去查詢資料庫。返回請求資料的同時,把資料存放區到緩衝中一份。
  3. 保持緩衝的“新鮮性”,每當資料發生變化的時候(比如,資料有被修改,或被刪除的情況下),要同步的更新緩衝資訊,確保使用者不會在緩衝取到舊的資料。

顯而易見,Memcached 在高並發的資料查詢和海量資料輸出的情況下,可以起到很大的作用。因為訪問Memcached
中的記憶體資料,要比資料庫的磁碟資料快的多。

如何安裝 Memcache?

如果你想在自己的伺服器上嘗試使用
Memcached,第一步就是要在你的伺服器上安裝
Memcached 的相關組件。好在Memcached 在很多伺服器的發行版軟體上都已經被預先安裝了。你可以通過在 Shell 下執行下面的命令,來檢查你的伺服器上有沒有被預先安裝了Memcached:

1 memcached -h

如果
Memcached 有被安裝過,上面的命令會輸出已經安裝的版本號碼資訊及一些協助資訊,否則則會返回一個錯誤。
下面以 CentOs 發行版為例,簡單介紹一下如何安裝
Memcached。

yum install memcached

上面的命令會線上搜尋並安裝最新的
Memcached 包。
Memcache 在什麼情況下被使用,什麼情況下不要使用?

你在何時應該使用 Memcache,又要在何時避免使用它?現在你已經知道了,Memcahced 是被設計為減輕資料庫端壓力的。但是你最好能制定一個良好的策略,來想辦法讓Memcached 來儘可能的緩衝那些最影響效能的查詢。你可以試著為應用中的所有查詢做一些執行時間日誌,可以協助你來分析哪些內容是要重點被緩衝的。
現在假設你正在運營一個電子商務網站。 你可以在
Memcached 中緩衝產品的簡介、運送資訊,或者其它一些需要複雜查詢的資料,等等。當一個產品頁被載入的時候,上面提到的資料將會跳過資料庫查詢,直接從緩衝中取得。緩衝可以大大的改變你的網站整體效能表現,你只需要記得在後台更新產品的時候,把這些緩衝一併更新就行了。
還有一些情況下,快取資料並不是一個好主意,比如在一個資料被頻繁更新的時候,每一次資料的更新,我們都需要去同時更新緩衝,緩衝的命中率不高,會導致一些額外的效能犧牲。這種情況下,或許直接查資料庫會更好一些。
Memcached 的安全性

如果你瞭解了
Memcached 的工作流程, 你可能已經注意到了,在訪問緩衝的過程中,沒有任何許可權控制的相關流程。如果你的資料不是非常重要的,你大可不必擔心這方面的安全問題。如果你需要的話,以下幾點可以協助你更完全的使用它:

  1. 使用唯一的 Key:因為在
    Memcached 中的資料是以一個大的數組形式存在的,所以你應該使用唯一的 key。訪問你的資料的唯一辦法就是通過你儲存資料時的 key,除此之外再沒有其它可查詢的辦法。
  2. 保證你的
    Memcached 器安全:
    因為
    Memcached 本身並沒有身分識別驗證機制,所以對
    Memcached 的伺服器查詢,都應該通過防火牆進行。你可以在防火牆上設定規則,哪些伺服器是允許被訪問的,哪些是不允許被訪問的。
  3. 加密你的資料: 你可以將資料和 Key 通過加密的方式儲存在
    Memcached 中。 這需要花費一些額外的 CPU 時間,但是為了你的資料安全,在情況允許的情況下,這個方法值得你去嘗試。

Memcached 代碼執行個體

讓我們來看一個實際的 PHP 例子。下面的代碼展示了如何從緩衝中取得資料,如果資料不存在,則自動從資料庫中查詢需要的資料,並將查詢到的資料儲存到緩衝中的過程。
要在你的網站使用上面的代碼,請先確認你有安裝
Memcached 的 PHP 擴充。你可以通過 PECL 來安裝對應的開發包。

class MyCache{    private $cache;      function  __construct(){        $this->cache = new Memcache();        // you can replace localhost by Memcached server IP addr and port no.        $this->cache->connect('localhost', 10987);    }    function get_data($key){      $data = $this->cache->get($key);      if($data != null){                    return $data;      }      else{          if($this->cache->getResultCode() == Memcached::RES_NOTFOUND){              //do the databse query here and fetch data              $this->cache->set($key,$data_returned_from_database);          }          else{              error_log('No data for key '.$key);          }      }  }}  $cache = MyCache();$cache->get_data('foo');

總結

Memcached 是一個強大的工具,幫忙你建立像 Wikipedia、Flickr、Digg 這樣的大型 WEB 應用。只要通過Memcached
就可以輕鬆提高你的網站效能,你還等什嗎?
翻譯:avenge
原文連結:http://www.developer.com/features/article.php/52691_3901666_1/Getting-Started-with-Memcached-Distributed-Memory-Caching.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.