1、linux下啟動memcache
[root@localhost ~]# memcached -d -m 512 -u root -p 12266 -c 256
參數名稱及意義:
-d 以守護進程方式啟動。如果該參數沒有指定,當按ctrl+c命令結束,memcache自動關閉
-m 分配給memcache使用的最大內存數 單位是m,默認是64m
-u 指定運行memcache的用戶
-l: 指定監聽的ip地址
-p 指定監聽的tcp端口號,可以通過-u指定udp端口.默認是11211
-c 最大並發連接數
-P 報錯進程id的文件
2、連接memcache
linux下一般使用telnet連接memcache服務,如下:
[root@localhost ~]# telnet 127.0.0.1 11266
3、基本操作
添加修改key-value,命令格式:
<command> <key> <flags> <exptime> <bytes>\r\n
參數名稱及意義:
command add, set或 replace
key 緩存的名字
flag 16位無符號整數,和key要存儲的數據一起存儲,並在程序get緩存時,返回。
exptime 過期時間,0 表示永遠不過期,如果非零,表示unix時間或距此秒數
bytes 存儲數據的字節數
\r\n 表示換行回車
【補充】
key:學過計算機基礎和學過計算機數據庫結構的人都知道,計算機有個比較常用的結構叫hash,這是數據結構中最重要的數據結構。key和value就是通過hash,hash有一個自己獨造的函數,通過key計算某個固定的值,將value存到這個key計算的固定的值里面,當我們通過get取得時候,通過key我們就可以很快的在內存中找到我們當時存的key所對應的value的值,所以速度非常快;
flag:memcache 基於簡單的文本協議,傳輸的東西,理解成字符串來存儲,有經驗的同學會將array() object() 轉成json_encode()這個字符串,存到 memcached里邊。那怎么來區分當時是存的是字符串還是array()或object()呢?這就是flag的意義。
例子:
add title 1 0 16
welcome to maizi
Stored
expire:設置緩存的有效期。它有三種方式:
1)設置它的秒數,從當前的時間算起,到第n秒失效。比如失效時間是10秒,就是從當前的時間算,過來10秒你再去get這個web的時候,它是沒有的。
2)使用時間戳的方式,就是指定明天某個時候失效,這個場景主要運用於搶購,如搶購手機,希望明天的這個時候緩存失效,可以從相關網站獲得時間戳信息如下。
3)將expire設置為0,設置為0后就不自動失效,有的人以為這個是一個永久數據,這種理解是錯誤的。這里說一種極端的方式,比如memcache掛了,再重啟memcache服務,但這里面的數據就都不會存在 了。我們在編譯memcache的時候,使用了一個最長的常量,默認時間為30天,所以即使你設置為0,30天以后,它的數據也會失效。還有一種情況是可能我等不到這30天,就會被新的數據擠出去,這個就 是老數據被踢的這個現象。
命令結果:
STORED #表示成功
NOT_STORED #表示失敗
CLIENT_ERROR bad data chunk #輸入數據有誤
添加緩存:
add kk 1 0 4 #回車
1234 #回車
STORED
如果key已經存在,則會添加失敗。如果數據 不是4個字節 應該會提示數據錯誤。
修改緩存:
replace kk 1 0 2 #回車
11 #回車
STORED
key存在時,成功;不存在時,失敗。
設置緩存:
set kk 1 0 4 #回車
1234 #回車
STORED
key不存在時,添加【add】;已存在時,替換【replace】。
讀取:
get kk
VALUE kk 1 4
1234
多個key時,用空格隔開。
刪除:
delete kk #回車
DELETED
清空所有緩存:
flush_all
OK
查看緩存服務器狀態:
stats
其他命令:
version #顯示版本號
stats reset #清空統計數據
stats slabs #顯示各個slab的信息,包括chunk的大小、數目、使用情況等
stats items #顯示各個slab中item的數目和存儲時長(最后一次訪問距離現在的秒數)
退出telnet:
ctrl+]
tlenet>quit