聲明:
此文章是觀看韓順平老師教程時,自己整理的筆記,與韓老師上課時所作的筆記類似。
1. memcahe提高數據訪問速度。將數據放入內存中。
(1)直接查詢:讀取需要的數據
(2)使用真靜態:從磁盤中讀取數據。
(3)使用mencache:從內存中獲取數據。
2. memcahe維護了一張內存表(hashtable)用鍵值對存放數據。
Key value
100 10
說明:memcahe的key一般是字串不能重複。否則就會被沖掉。
Value可以放入字符串、數值、布爾值、數組、對象、二進制
3. 安裝使用memcached
(1)下載memcached軟件 減壓後。
(2)打開cmd cd到memcached.exe存放的地方
(3)然後安裝指令:memcached.exe –d install
啓動memcached
(1) 到計算機管理/服務和應用程序處啓動
(2) 命令行啓動:memcached.exe –d start
(3) 使用netstat –an 如果看到11211端口在監聽,就說明啓動成功。
說明:使用netstat –an還可以看到那些IP正在訪問這個服務器。
使用netstat –anb可以查看哪個程序正在使用哪個端口。
(4) memcached常用命令:
memcached的基本命令(安裝、卸載、啓動、配置相關):
-p 監聽的端口
-l 連接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時連接數,默認是1024
-f 塊大小增長因子,默認是1.25
-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助
memcached的基本命令(當memcached啓動後用於對memcached管理的數據和本身運行狀態相關的命令):
Command |
Description |
Example |
get |
Reads a value |
get mykey |
set |
Set a key unconditionally |
set mykey 0 60 5 |
add |
Add a new key |
add newkey 0 60 5 |
replace |
Overwrite existing key |
replace key 0 60 5 |
append |
Append data to existing key |
append key 0 60 15 |
prepend |
Prepend data to existing key |
prepend key 0 60 15 |
incr |
Increments numerical key value by given number |
incr mykey 2 |
decr |
Decrements numerical key value by given number |
decr mykey 5 |
delete |
Deletes an existing key |
delete mykey |
flush_all |
Invalidate specific items immediately |
flush_all |
Invalidate all items in n seconds |
flush_all 900 |
|
stats |
Prints general statistics |
stats |
Prints memory statistics |
stats slabs |
|
Prints memory statistics |
stats malloc |
|
Print higher level allocation statistics |
stats items |
|
|
stats detail |
|
|
stats sizes |
|
Resets statistics |
stats reset |
|
version |
Prints server version. |
version |
verbosity |
Increases log level |
verbosity |
quit |
Terminate telnet session |
quit |
對查看的信息的關鍵字中英文對照表
pid |
memcache服務器的進程ID |
uptime |
服務器已經運行的秒數 |
time |
服務器當前的unix時間戳 |
version |
memcache版本 |
pointer_size |
當前操作系統的指針大小(32位系統一般是32bit) |
rusage_user |
進程的累計用戶時間 |
rusage_system |
進程的累計系統時間 |
curr_items |
服務器當前存儲的items數量 |
total_items |
從服務器啓動以後存儲的items總數量 |
bytes |
當前服務器存儲items佔用的字節數 |
curr_connections |
當前打開着的連接數 |
total_connections |
從服務器啓動以後曾經打開過的連接數 |
connection_structures |
服務器分配的連接構造數 |
cmd_get |
get命令(獲取)總請求次數 |
cmd_set |
set命令(保存)總請求次數 |
get_hits |
總命中次數 |
get_misses |
總未命中次數 |
evictions |
爲獲取空閒內存而刪除的items數(分配給memcache的空間用滿後需要刪除舊的items來得到空間分配給新的items) |
bytes_read |
總讀取字節數(請求字節數) |
bytes_written |
總髮送字節數(結果字節數) |
limit_maxbytes |
分配給memcache的內存大小(字節) |
threads |
當前線程數 |
4.使用memcached如何進行增刪改查。
(1)通過PHP程序操作用的最多。
(1)memcache擴展操作
(2)memcached擴展操作
(3)直接使用socket編程來操作
(2)telnet工具操作
Telnet操作:
(1)登錄到telnet鏈接到memcached服務。
telnet 127.0.0.1(要鏈接服務器的IP地址) 11211
(2)增加
基本語法:add key1(鍵名) 0(佔位符) 30(保存時間) 5(值的長度) 回車後 輸入值
(3)獲取
基本語法:get key1(鍵值)
(4)修改
基本語法:set key1 0 存放時間 值大小(key1不存在增加)
或者使用:replace key1 0 存放時間 值大小(key1不存在失敗)
(5)刪除
delete key1
使用PHP程序操作memcached服務(curd):
(1)把對應版本的php_memcache.dll文件下載保存到php的ext下。
(2)修改php.ini文件:extension=php_memcache.dll(上面的dll文件名。)
(3)重啓apache
使用直接使用socket編程來操作:
(1)別人寫好的函數源碼,直接操作。
5.memcached機制深入瞭解。
(1)使用memcached是基於CS結構。Memcached作爲服務器。
(2)基於libevent的事件處理併發機制。
(3)數據放入內存中。
(4)基於客戶端分佈式。
說明:
(1)生命週期:若把時間設爲0,則表示永不過期。
(2)重啓memcached服務,那麼裏面的數據都會銷燬。
(3)如何把session數據放入memcached中。
(1)在php.ini中配置 在[Session]中修改:
session.save_handler = memcache(設置以何種方式存放)
session.save_path ="tcp://127.0.0.1:11211"(設置session存放路徑)
說明:這樣就可以將session保存到memcached中,我們不用管它如何保存,我們依然用$_SESSION[]取出該值。
(2)或者在頁面中使用ini_set()改變當前頁面的php.ini中配置。
ini_set(“session.save_handler”,” memcache”);
ini_set(“session.save_path”,” tcp://127.0.0.1:11211”);
(4)memcahe數據是無狀態的,不和任何用戶綁定。
(5)memcache安全性。將memcached放到內網。然後設置防火牆。
(6)什麼樣的數據適合放入memcached中?
(1)變化頻繁,具有不穩定性的數據,不需要實時入庫, (比如用戶在線狀態、在線人數..)
(2)門戶網站的新聞等,覺得頁面靜態化仍不能滿足要求,可以放入
(7)Redis(Key/value型數據庫)技術與memcache類似,將數據保存在內存中,並定時向硬盤中同步