Memcached 是一個分佈式的緩存系統, 可是 Memcachd 究竟是什麼意思,有什麼做用呢?緩存通常用來保存一些常常被存取的數據和資源(例如:瀏覽器會將訪問過的網頁會話緩存起來),由於經過緩存來存取數據要比從磁盤存取一樣的數據要快得多。因此 Memcached 顧名思義,意味着 「內存緩存」,全部緩存的內容都在服務器的內存中。內存中的這些緩存數據能夠經過 API 的方式被存取。數據是以 key/value 的配對方式存在的,就像一像大的 Hash 表。php
分佈式是 Memcached 的主要特性,因此你能夠在多臺服務器上來安裝 Memcached 來組建一個更大的緩存服務器。這樣一來,Memcached 能夠幫助咱們使數據庫的壓力降到最低, 從而咱們能夠構建出更快的、更具擴展性的 WEB 應用。圖一展現了 Memcache 如何與數據庫端協同工做的狀況。mysql
圖一展現的流程,相信有開發過數據庫應用的同窗都不會陌生。咱們來一步步的說明圖中發生了什麼事情:sql
顯而易見,Memcached 在高併發的數據查詢和海量數據輸出的狀況下,能夠起到很大的做用。由於訪問 Memcached 中的內存數據,要比數據庫的磁盤數據快的多。數據庫
若是你想在本身的服務器上嘗試使用 Memcached,第一步就是要在你的服務器上安裝 Memcached 的相關組件。好在Memcached 在不少服務器的發行版軟件上都已經被預安裝了。你能夠經過在 Shell 下執行下面的命令,來檢查你的服務器上有沒有被預安裝了 Memcached:數組
memcached -h瀏覽器
若是 Memcached 有被安裝過,上面的命令會輸出已經安裝的版本號信息及一些幫助信息,不然則會返回一個錯誤。緩存
下面以 CentOs 發行版爲例,簡單介紹一下如何安裝 Memcached。安全
yum install memcached 上面的命令會在線搜索並安裝最新的 Memcached 包。服務器
你在什麼時候應該使用 Memcache,又要在什麼時候避免使用它?如今你已經知道了,Memcahced 是被設計爲減輕數據庫端壓力的。可是你最好能制定一個良好的策略,來想辦法讓 Memcached 來儘量的緩存那些最影響性能的查詢。你能夠試着爲應用中的全部查詢作一些執行時間日誌,能夠幫助你來分析哪些內容是要重點被緩存的。併發
如今假設你正在運營一個電子商務網站。 你能夠在 Memcached 中緩存產品的簡介、運送信息,或者其它一些須要複雜查詢的數據,等等。當一個產品頁被加載的時候,上面提到的數據將會跳過數據庫查詢,直接從緩存中取得。 緩存能夠大大的改變你的網站總體性能表現,你只須要記得在後臺更新產品的時候,把這些緩存一併更新就好了。
還有一些狀況下,緩存數據並非一個好主意,好比在一個數據被頻繁更新的時候,每一次數據的更新,咱們都須要去同時更新緩存,緩存的命中率不高,會致使一些額外的性能犧牲。這種狀況下,或許直接查數據庫會更好一些。
若是你瞭解了 Memcached 的工做流程, 你可能已經注意到了,在訪問緩存的過程當中,沒有任何權限控制的相關流程。若是你的數據不是很是重要的,你大可沒必要擔憂這方面的安全問題。若是你須要的話,如下幾點能夠協助你更徹底的使用它:
讓咱們來看一個實際的 PHP 例子。下面的代碼展現瞭如何從緩存中取得數據,若是數據不存在,則自動從數據庫中查詢須要的數據,並將查詢到的數據保存到緩存中的過程。
<?php 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 的 PHP 擴展。你能夠經過 PECL 來安裝對應的開發包。
Memcached 是一個強大的工具,幫忙你創建像 Wikipedia、Flickr、Digg 這樣的大型 WEB 應用。只要經過 Memcached 就能夠輕鬆提升你的站點性能,你還等什麼?