一、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型數據庫),將數據保存在內存中,並定時向硬 盤中同步。