是一個高性能的分布式內存對象緩存系統。
和mysql比較,進行理解memcache
(1)該軟件是一個c/s架構,
(2)mysql的數據是存儲到哪裡的?是存儲到磁盤裡面的。
memcache的數據是存儲到內存裡面。
(3)mysql的數據存儲是,由數據庫,數據表,數據的記錄,存儲數據是按照表的結構進行存儲的。
memcache的數據存儲格式是:key/value的格式,來存儲的,相當於在內存裡面有一張兩列的哈希表。類似於php的裡面的關聯數組
key (鍵名) 值
比如有一個查詢系統,查詢某個學生的信息:
(1)准備軟件,為了方便管理,把該文件拷貝到和apache或mysql或php同一級目錄下面。
(2)開始安裝:
把該軟件安裝成windows的一個服務,便於管理。
步驟:
以管理員的方式,打開cmd(命令提示符),進入到 memcached文件所在的目錄。
可以使用memcahced.exe –h 查看幫助命令。
memcache –d install 開始安裝:
安裝完成後,要完成啟動該服務,
memcached –d start
查看是否啟動成功,可以通過計算機管理裡面的服務選項查看。
memcache的默認端口號是11211,可以通過查看端口,來判斷是否開啟該服務,
通過使用netstat –an命令,來查看當前計算機裡面監聽的服務。
memcached –d stop停止memcache的服務。
(3)在安裝時,對應的一些參數設置。
比如設置,緩存的大小。
-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 顯示幫助
-v 輸出警告和錯誤信息。
-vv 打印客戶端的請求和返回信息
-i 打印memcached和libevent的版權信息
打開cmd進行輸入:
Telnet ip地址(域名)端口號
(1)設置數據,向memcache裡面添加數據
添加數據:
語法:
add 鍵名 0|1(是否壓縮)緩存周期值的長度 [按回車,進行輸入要添加的數據]
0表示不壓縮,1表示要壓縮
緩存周期:單位是秒,
值的長度:長度的單位和客戶端有關,此處是字節。
注意:如果鍵已經存在,則添加失敗。
修改數據:
replace
語法格式和add是一樣的。
注意:如果鍵不存在,則修改失敗,只能修改已經存在的鍵。
設置數據:
set命令和add的語法是一樣的。
如果使用set命令,如果鍵已經存在,則是完成修改,如果鍵不存在則是添加操作。
(2)獲取數據
get 鍵名
(3)刪除數據
delete 鍵名
flush_all 清空所有的數據,
可以設置某一個有效期,
flush_all 秒數,在多少秒之後,清空所有的鍵。
(4)數據追加
append 在原有值的後面追加數據
preappend 在原有值的前面追加數據。
(5)查看當前狀態的一個命令:
通過該stats 命令能夠獲取,執行了多少次的get查詢,有多少次能夠使用get查詢到數據,有多少次能夠使用get查詢失敗,計算命中率,
計算命中率 get成功查詢的次數/get的總的查詢次數,通過命中率來判斷memcache服務性能。
(1)要准備memcache php的擴展,在安裝擴展時,要和php的版本一致。
(2)把對應的擴展拷貝到到php安裝目錄ext目錄裡面。
(3)打開php.ini文件,要開啟該擴展,完成後,要重啟apache,
(4)測試,是否安裝擴展成功,使用phpinfo();函數
(1)實例化一個對象。
$mem = new Memcache();
(2)連接memcache,使用connect函數。
$mem->connect(主機名,端口號)
$mem->add/set(鍵名,值,是否壓縮,緩存時間)
$mem->get(鍵名)
(3)對存儲的數據類型進行討論。
php的數據類型:標量數據類型的存儲方式。
php的標量類型在memcac he裡面存儲都是轉換成字符串的形式來存儲的。
php的數據類型:數組的形式。
在存儲數組時,把數組序列化之後,存儲到 memcache裡面的,在取出數組數據時,自動給我們反序列化。數組的序列化和反序列化,是有add和get函數完成的,無需我們自己干預。
根據一個sql取出的數據,把sql取出的數據,給緩存到memcache裡面,當下次再操作該sql語句的時候,則直接從memcache裡面獲取。
緩存周期的設置有兩種方式:
如果緩存周期設置為0表明此數據永不過期
第一種使用:秒數,最大不能超過30天,即2592000秒,
第二種使用:使用時間戳,該時間戳是到的哪個時間點。比如我們要把一個數據緩存60天,
$mem->add($key,$value,0,time()+60*24*3600)
就是說,緩存的數據,到期後,不會自動刪除,當get數據的時候,查看有沒有到期,如果到期了,則再刪除該數據。
memcache不會開啟進程來監視鍵是否過期,省memcache的資源,也省cpu.
最近最少使用原則,
當前存儲的數據的在memcache裡面空間已經占滿後,則memcache會把不活躍(get或set次數比較少的)的數據(不管是否到期)清除,讓新的數據給存儲進來。
memcache定位就是做數據的緩存的,不是數據的持久存儲的,因此沒有做一些用戶的驗證,目的提高連接速度,發揮自己的獨特功能。
memcahe該軟件本身沒有提供一些安全機制,如果要限制使用,則只能在操作系統的層面來解決,比如window系統、安裝防火牆的軟件,在linux下面使用iptables,seclinux(安全機制)
存儲的數據的特點:
訪問比較頻繁,
安全性不高,丟失無所謂,
修改比較頻繁的數據,比如一些用戶的在線狀態,