Memcached詳解


一、Memcached概念

memcached基本概念

Memcached是danga的一個項目,最早是LiveJournal 服務的,最初為了加速 LiveJournal 訪問速度而開發的,后來被很多大型的網站采用。 官方網站: www.danga.com 和 memcached.org

Memcached是一個高性能的分布式的內存對象緩存系統,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度。(注: 摘自百度全科)

二、Memcached--使用好處

三種方案的比較

1. 數據庫

2. 頁面靜態化

3. memcached 緩存技術

三、Memcached--原理示意圖

簡單的說: memcached就是在內存 中維護一張巨大的hash表,通過自己 的一套算法來維護數據的操作,這個 算法比較復雜,這里我們只做簡單的 介紹,對我們PHP程序員而言,重點 掌握如何在項目如何使Memcached 技術. [示意圖]

四、Memcached-安裝

安裝步驟

①下載memcached軟件

②將memcached軟件拷貝到某個目錄,最好放在php開發環境目錄下, 便於管理

③安裝 memcached –d install [卸載使用 memcached -d uninstall]

④啟動 memcached 服務

  (1)直接通過界面啟動該服務

  (2)在控制台下啟動 memcached –d start [命令一覽表]

⑤查看memcached 服務是否啟動成功! 默認端口11211

查看 memcached 可使用命令: memcached -h

五、telnet操作Memcached 

許多語言都實現了連接memcached的客戶端,其中以Perl、 PHP為主。

僅僅memcached網站上列出的語言就有: • Perl • PHP • Python • Ruby • C# • C/C++

使用Telnet程序(客戶端)對Memcached進行CRUD操作!,這 里我們需要使用到Memcached給我們提供的命令

六、php操作Memcached

通過php程序操作Memcached服務幾種形式

1.安裝並配置Memcache擴展庫

在php.ini文件添加: extension=php_memcache.dll 並把對應的dll文件拷貝到 ext目錄下

2.使用php對Memcached進行CRUD操作 [配合php幫助手冊]

七、memcached-client操作 

疑問: 如果我們沒有memcache.dll文件,

我們能不能去操作memcached 內存數據呢?

特點:

1.不需要開啟memcache擴展

2.使用fsockopen()套接字連接memcached

3.同樣執行執行CRUD

八、Memcached機制深入了解

①基於c/s架構 ,協議簡單

c/s架構,此時memcached為服務器端,我們可以使用如PHP,c/c++等程序連接memcached服務器。

memcached的服務器客戶端通信並不使用XML等格式,而使用簡單的基於文本行的協議。因此,通過telnet也能在memcached上保存數據、取得數據

②基於libevent的事件處理

libevent是一套跨平台的事件處理接口的封裝,能夠兼容包括這些操作系統: Windows/Linux/BSD/Solaris 等操作系統的的事件處理。

Memcached 使用libevent來進行網絡並發連接的處理,能夠保持在很大並發情況下,仍舊能夠保持快速的響應能力。

③內置內存存儲方式

為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,內容容量達到指定值之后,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此並沒有過多考慮數據的永久性問題。

④基於客戶端的分布式

memcached盡管是“分布式”緩存服務器,但服務器端並沒有分布式功能。各個memcached不會互相通信以共享信息。那么,怎樣進行分布式呢?這完全取決於客戶端的實現。如圖

九、Memcached細節討論

1. 生命周期

2. Memcached數據存在什么地方

3. Memcached最佳實踐

① 將從數據庫查詢的數據放入Memcached (舉例說明-偽代碼)

② 將Session數據放入到Memcached(舉例說明)

保證memcache擴展開啟,memcachd運行

設置php.ini中session.save_handler=memcache

設置php.ini中session.save_path=tcp://localhost:11211

也可以通過php函數ini_set() 函數在頁面設置.

4.Memcached的數據是無用戶狀態的.即不會和某個用戶綁定

5.Memcached訪問安全性(舉例)

設置防火牆 iptables -a input -p 協議 -s 可以訪問ip -dport 端口 -j ACCEPT

什么樣的數據適合放入memcached中?

變化頻繁,具有不穩定性的數據,不需要實時入庫, (比如用戶在線 狀態、在線人數..) 門戶網站的新聞等,覺得頁面靜態化仍不能滿足要求,可以放入 到memcache中.(配合jquey的ajax請求)

什么樣的數據不適合放入memcached中?

小結如何決定是否使用memcached

十、Memcached vs session的比較

1.存放的介質不同

2.生命周期方式

3.要解決的問題重點不同

相關技術

Redis(Key/value型數據庫),將數據保存在內存中,並定時向硬 盤中同步。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM