php分布式快取系統 Memcached 入門

2022-07-31 11:51:14 字數 2412 閱讀 8164

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 

class

mycache

function get_data($key)

else}}}

$cache =mycache();

$cache->get_data('foo');

?>

要在你的**使用上面的**,請先確認你有安裝 memcached 的 php 擴充套件。你可以通過 pecl 來安裝對應的開發包。

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的處理速度顯然不在同乙個數量級,從減輕資料庫的壓力和提高系統的響應速度兩個角度來考慮,因而都會在資料庫之前加一層快取。由於單機的記憶體資源和承載能力有限,因而可以採用多台伺服器來用作快取,使得多台快取伺服器形同一台,並且不會...