memcached 是乙個分布式的快取系統, 但是 memcachd 到底是什麼意思,有什麼作用呢?快取一般用來儲存一些經常被訪問的資料和資源(例如:瀏覽器會將訪問過的網頁會話快取起來),因為通過快取來訪問資料要比從磁碟訪問同樣的資料要快得多。所以 memcached 顧名思義,意味著 「記憶體快取」,所有快取的內容都在伺服器的記憶體中。記憶體中的這些快取資料可以通過 api 的方式被訪問。資料是以 key/value 的配對方式存在的,就像一像大的 hash 表。
分布式是 memcached 的主要特性,所以你可以在多台伺服器上來安裝 memcached 來組建乙個更大的快取伺服器。這樣一來,memcached 可以幫助我們使資料庫的壓力降到最低, 從而我們可以構建出更快的、更具擴充套件性的 web 應用。圖一展示了 memcache 如何與資料庫端協同工作的情況。
圖一展示的流程,相信有開發過資料庫應用的同學都不會陌生。我們來一步步的說明圖中發生了什麼事情:
檢查使用者請求的資料是快取中是否有存在,如果有存在的話,只需要直接把請求的資料返回,這時候跟資料庫就完全扯不上關係了。
如果請求的資料在快取中找不到,這時候再去查詢資料庫。返回請求資料的同時,把資料儲存到快取中乙份。
保持快取的「新鮮性」,每當資料發生變化的時候(比如,資料有被修改,或被刪除的情況下),要同步的更新快取資訊,確保使用者不會在快取取到舊的資料。
顯而易見,memcached 在高併發的資料查詢和海量資料輸出的情況下,可以起到很大的作用。因為訪問 memcached 中的記憶體資料,要比資料庫的磁碟資料快的多。
如果你想在自己的伺服器上嘗試使用 memcached,第一步就是要在你的伺服器上安裝 memcached 的相關元件。好在memcached 在很多伺服器的發行版軟體上都已經被預安裝了。你可以通過在 shell 下執行下面的命令,來檢查你的伺服器上有沒有被預安裝了 memcached:
memcached -h
如果 memcached 有被安裝過,上面的命令會輸出已經安裝的版本號資訊及一些幫助資訊,否則則會返回乙個錯誤。
下面以 centos 發行版為例,簡單介紹一下如何安裝 memcached。
你在何時應該使用 memcache,又要在何時避免使用它?現在你已經知道了,memcahced 是被設計為減輕資料庫端壓力的。但是你最好能制定乙個良好的策略,來想辦法讓 memcached 來盡可能的快取那些最影響效能的查詢。你可以試著為應用中的所有查詢做一些執行時間日誌,可以幫助你來分析哪些內容是要重點被快取的。
現在假設你正在運營乙個電子商務**。 你可以在 memcached 中快取產品的簡介、運送資訊,或者其它一些需要複雜查詢的資料,等等。當乙個產品頁被載入的時候,上面提到的資料將會跳過資料庫查詢,直接從快取中取得。 快取可以大大的改變你的**整體效能表現,你只需要記得在後台更新產品的時候,把這些快取一併更新就行了。
還有一些情況下,快取資料並不是乙個好主意,比如在乙個資料被頻繁更新的時候,每一次資料的更新,我們都需要去同時更新快取,快取的命中率不高,會導致一些額外的效能犧牲。這種情況下,或許直接查資料庫會更好一些。
如果你了解了 memcached 的工作流程, 你可能已經注意到了,在訪問快取的過程中,沒有任何許可權控制的相關流程。如果你的資料不是非常重要的,你大可不必擔心這方面的安全問題。如果你需要的話,以下幾點可以協助你更完全的使用它:
使用唯一的 key:因為在 memcached 中的資料是以乙個大的陣列形式存在的,所以你應該使用唯一的 key。訪問你的資料的唯一辦法就是通過你儲存資料時的 key,除此之外再沒有其它可查詢的辦法。
保證你的 memcached 器安全:因為 memcached 本身並沒有身份驗證機制,所以對 memcached 的伺服器查詢,都應該通過防火牆進行。你可以在防火牆上設定規則,哪些伺服器是允許被訪問的,哪些是不允許被訪問的。
加密你的資料:你可以將資料和 key 通過加密的方式儲存在 memcached 中。 這需要花費一些額外的 cpu 時間,但是為了你的資料安全,在情況允許的情況下,這個方法值得你去嘗試。memcached **例項
讓我們來看乙個實際的 php 例子。下面的**展示了如何從快取中取得資料,如果資料不存在,則自動從資料庫中查詢需要的資料,並將查詢到的資料儲存到快取中的過程。
<?php要在你的**使用上面的**,請先確認你有安裝 memcached 的 php 擴充套件。你可以通過 pecl 來安裝對應的開發包。class
mycache
function get_data($key)
else}}}
$cache =mycache();
$cache->get_data('foo');
?>
memcached 是乙個強大的工具,幫忙你建立像 wikipedia、flickr、digg 這樣的大型 web 應用。只要通過 memcached 就可以輕鬆提高你的站點效能,你還等什麼?
分布式快取
分布式快取 原則來說跟應用伺服器分布式應該是一樣,但快取是有狀態的。怎麼樣提高命中?1.最原始的演算法 那就是key hash取模,取到伺服器ip。在大量伺服器伸縮行有問題,加入一台伺服器就有可能讓所有的快取都失效。如 key hash 後是100,取10膜是0,取11膜 1,101 取10膜是1,...
分布式快取
網際網路發展的同時,也引領者相關技術的發展與變革,比如集群 高併發 負載均衡 高可用 海量資料的處理 系統安全 分布式快取等各方面的相關技術。簡單談一下分布式快取技術。2 三層架構 1 web層 表現層 主要對使用者資料接收,以及資料處理完成後返回,為客戶端提 用程式的訪問 2 應用層 對業務的處理...
分布式快取
分布式快取 1 什麼是分布式快取?在高併發的環境下,大量的i o處理與cpu的處理速度顯然不在同乙個數量級,從減輕資料庫的壓力和提高系統的響應速度兩個角度來考慮,因而都會在資料庫之前加一層快取。由於單機的記憶體資源和承載能力有限,因而可以採用多台伺服器來用作快取,使得多台快取伺服器形同一台,並且不會...