1、Memcached概念php
memcached基本概念c++
Memcached是danga的一個項目,最先是LiveJournal 服務的,最初爲了加速 LiveJournal 訪問速度而開發的,後來被不少大型的網站採用。 官方網站: www.danga.com 和 memcached.org程序員
Memcached是一個高性能的分佈式的內存對象緩存系統,目前全世界很多人使用這個緩存項目來構建本身大負載的網站,來分擔數據庫的壓力,經過在內存裏維護一個統一的巨大的hash表,它可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。(注: 摘自百度全科)ajax
2、Memcached--使用好處算法
三種方案的比較數據庫
1. 數據庫緩存
2. 頁面靜態化安全
3. memcached 緩存技術服務器
3、Memcached--原理示意圖網絡
簡單的說: memcached就是在內存 中維護一張巨大的hash表,經過本身 的一套算法來維護數據的操做,這個 算法比較複雜,這裏咱們只作簡單的 介紹,對咱們PHP程序員而言,重點 掌握如何在項目如何使Memcached 技術. [示意圖]
4、Memcached-安裝
安裝步驟
①下載memcached軟件
②將memcached軟件拷貝到某個目錄,最好放在php開發環境目錄下, 便於管理
③安裝 memcached –d install [卸載使用 memcached -d uninstall]
④啓動 memcached 服務
(1)直接經過界面啓動該服務
(2)在控制檯下啓動 memcached –d start [命令一覽表]
⑤查看memcached 服務是否啓動成功! 默認端口11211
查看 memcached 可以使用命令: memcached -h
5、telnet操做Memcached
許多語言都實現了鏈接memcached的客戶端,其中以Perl、 PHP爲主。
僅僅memcached網站上列出的語言就有: • Perl • PHP • Python • Ruby • C# • C/C++
使用Telnet程序(客戶端)對Memcached進行CRUD操做!,這 裏咱們須要使用到Memcached給咱們提供的命令
6、php操做Memcached
經過php程序操做Memcached服務幾種形式
1.安裝並配置Memcache擴展庫
在php.ini文件添加: extension=php_memcache.dll 並把對應的dll文件拷貝到 ext目錄下
2.使用php對Memcached進行CRUD操做 [配合php幫助手冊]
7、memcached-client操做
疑問: 若是咱們沒有memcache.dll文件,
咱們能不能去操做memcached 內存數據呢?
特色:
1.不須要開啓memcache擴展
2.使用fsockopen()套接字鏈接memcached
3.一樣執行執行CRUD
8、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不會互相通訊以共享信息。那麼,怎樣進行分佈式呢?這徹底取決於客戶端的實現。如圖
9、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
10、Memcached vs session的比較
1.存放的介質不一樣
2.生命週期方式
3.要解決的問題重點不一樣
相關技術
Redis(Key/value型數據庫),將數據保存在內存中,並定時向硬 盤中同步。