Linux下的Memcache安裝,啟動


一、linux安裝memcache

1. 如果通過下載源碼進行安裝,則需要下載最新版本http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

如果通過apt-get方式安裝,則無需下載。

2. 進行memcache的安裝:

1).下載源碼,進行編譯安裝

Memcache用到了libevent這個庫用於Socket的處理,所以還需要安裝libevent,libevent的最新版本是https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz,如果你的系統已經安裝了libevent,則不需要安裝。

# cd /tmp

# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz

# wgethttp://www.monkey.org/~provos/libevent-1.2.tar.gz

2.先安裝libevent:

# tar zxvf libevent-1.2.tar.gz

# cd libevent-1.2

# ./configure --prefix=/usr

# make

# make install

    測試libevent是否已經安裝。

# ls -al /usr/lib | grep libevent

lrwxrwxrwx 1 root root 21 11?? 12 17:38libevent-1.2.so.1 -> libevent-1.2.so.1.0.3

-rwxr-xr-x 1 root root 263546 11?? 12 17:38libevent-1.2.so.1.0.3

-rw-r--r-- 1 root root 454156 11?? 12 17:38 libevent.a

-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la

lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so-> libevent-1.2.so.1.0.3

安裝memcache

安裝memcached,同時需要安裝中指定libevent的安裝位置:

# cd /tmp

# tar zxvf memcached-1.2.0.tar.gz

# cd memcached-1.2.0

# ./configure --with-libevent=/usr

# make

# make install

如果中間出現報錯,請仔細檢查錯誤信息,按照錯誤信息來配置或者增加相應的庫或者路徑。

安裝完成后會把memcached放到 /usr/local/bin/memcached 。

測試是否成功安裝memcached:

# ls -al /usr/local/bin/mem*

-rwxr-xr-x 1 root root 137986 11?? 12 17:39/usr/local/bin/memcached

-rwxr-xr-x 1 rootroot 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

2)通過apt-get進行安裝:

    sudo apt-get install memcached,推薦通過該方式進行安裝,比較簡單,不容易出現錯誤。

    啟動memcache服務器:

    memcached -d -m 50 -p 11211 -u root

    memcached常用啟動參數描述:

-d:啟動一個守護進程,
-m:分配給Memcache使用的內存數量,單位是MB,默認是64MB,
-u:運行Memcache的用戶
-l:監聽的服務器IP地址
-p:設置Memcache監聽的端口,默認是11211注:-p(p為小寫)
-c:設置最大並發連接數,默認是1024
-P:設置保存Memcache的pid文件注:-P(P為大寫)
-h 顯示幫助

二、命令行訪問memcached

3.1 memcached Telnet Interface

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

3.2 telnet請求命令格式

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
a) <command name> 可以是”set”, “add”, “replace”。
  “set”表示按照相應的<key>存儲該數據,沒有的時候增加,有的覆蓋。
  “add”表示按照相應的<key>添加該數據,但是如果該<key>已經存在則會操作失敗。
  “replace”表示按照相應的<key>替換數據,但是如果該<key>不存在則操作失敗

b) <key> 客戶端需要保存數據的key。

c) <flags> 是一個16位的無符號的整數(以十進制的方式表示)。
該標志將和需要存儲的數據一起存儲,並在客戶端get數據時返回。
客戶可以將此標志用做特殊用途,此標志對服務器來說是不透明的。

d) <exptime> 過期的時間。
若為0表示存儲的數據永遠不過時(但可被服務器算法:LRU 等替換)。
如果非0(unix時間或者距離此時的秒數),當過期后,服務器可以保證用戶得不到該數據(以服務器時間為標准)。

e) <bytes> 需要存儲的字節數(不包含最后的”\r\n”),當用戶希望存儲空數據時,<bytes>可以為0

f) 最后客戶端需要加上”\r\n”作為”命令頭”的結束標志。
<data block>\r\n

緊接着”命令頭”結束之后就要發送數據塊(即希望存儲的數據內容),最后加上”\r\n”作為此次通訊的結束。

3.3 telnet響應命令

結果響應:reply
當以上數據發送結束之后,服務器將返回一個應答。可能有如下的情況:

a) “STORED\r\n”:表示存儲成功
b) “NOT_STORED\r\n” : 表示存儲失敗,但是該失敗不是由於錯誤。
通常這是由於”add”或者”replace”命令本身的要求所引起的,或者該項在刪除隊列之中。

如: set key 33 0 4\r\n
ffff\r\n

4、獲取/檢查KeyValue
get <key>*\r\n
a) <key>* 表示一個或者多個key(以空格分開)
b) “\r\n” 命令頭的結束

結果響應:reply
服務器端將返回0個或者多個的數據項。每個數據項都是由一個文本行和一個數據塊組成。當所有的數據項都接收完畢將收到”END\r\n”
每一項的數據結構:
VALUE <key> <flags> <bytes>\r\n
<data block>\r\n

a) <key> 希望得到存儲數據的key
b) <falg> 發送set命令時設置的標志項
c) <bytes> 發送數據塊的長度(不包含”\r\n”)
d) “\r\n” 文本行的結束標志
e) <data block> 希望接收的數據項。
f) “\r\n” 接收一個數據項的結束標志。

如果有些key出現在get命令行中但是沒有返回相應的數據,這意味着服務器中不存在這些項,這些項過時了,或者被刪除了
如:get aa
VALUE aa 33 4
ffff
END

5、刪除KeyValue:
delete <key> <time>\r\n

a) <key> 需要被刪除數據的key
b) <time> 客戶端希望服務器將該數據刪除的時間(unix時間或者從現在開始的秒數)
c) “\r\n” 命令頭的結束

6、檢查Memcache服務器狀態:
stats\r\n
在這里可以看到memcache的獲取次數,當前連接數,寫入次數,已經命中率等;

pid : 進程id
uptime :總的運行時間,秒數
time : 當前時間
version : 版本號
……
curr_items : 當前緩存中的KeyValue數量
total_items : 曾經總共經過緩存的KeyValue數量
bytes : 所有的緩存使用的內存量
curr_connections 當前連接數
….
cmd_get : 總獲取次數
cmd_set : 總的寫入次數
get_hits : 總的命中次數
miss_hits :  獲取失敗次數
…..
bytes_read : 總共讀取的流量字節數
bytes_written : 總的寫入流量字節
limit_maxbytes : 最大允許使用的內存量,字節

7、高級緩存細節查看方法:
stats reset
清空統計數據

stats malloc
顯示內存分配數據

stats cachedump slab_id limit_num
顯示某個slab中的前limit_num個key列表,顯示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本顯示的是  訪問時間(timestamp)
1.2.4以上版本,包括1.2.4顯示 過期時間(timestamp)
如果是永不過期的key,expire_time會顯示為服務器啟動的時間

stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]

stats slabs
顯示各個slab的信息,包括chunk的大小、數目、使用情況等

stats items
顯示各個slab中item的數目和最老item的年齡(最后一次訪問距離現在的秒數)

stats detail [on|off|dump]
設置或者顯示詳細操作記錄

參數為on,打開詳細操作記錄
參數為off,關閉詳細操作記錄
參數為dump,顯示詳細操作記錄(每一個鍵值get、set、hit、del的次數)

8、清空所有鍵值
flush_all
注:flush並不會將items刪除,只是將所有的items標記為expired,因此這時memcache依舊占用所有內存。

9、退出
quit\r\n

 

10 示例:

下面假設memcached 啟動時的-p 參數為11311,命令操作在啟動memcached

本機首先telnet 連接到memcached 服務器

telnet 127.0.0.1 11311

telnet 成功之后,大概會顯示下面的信息

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

各種狀態(stats) STAT

如:stats命令,則返回以下信息:

stats

返回:

STAT pid 4217
STAT uptime 542326
STAT time 1453378174
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 14.114854
STAT rusage_system 7.409873
STAT curr_connections 17
STAT total_connections 111
STAT connection_structures 18
STAT reserved_fds 20
STAT cmd_get 8447
STAT cmd_set 645
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 7162
STAT get_misses 1285
STAT delete_misses 23
STAT delete_hits 88
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 988228
STAT bytes_written 4834410
STAT limit_maxbytes 67108864#  分配給memcache的內存大小(字節)
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 1
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 7858  # 當前服務器存儲items占用的字節數
STAT curr_items 23  # 服務器當前存儲的items數量
STAT total_items 645
STAT expired_unfetched 38
STAT evicted_unfetched 0
STAT evictions 0  # 分配給memcache的空間用滿后需要刪除舊的items數,踢出。
STAT reclaimed 226  #回收再利用,已過期的數據條目來存儲新數據。
END

存儲命令(set ,add ,replace)

客戶端會發送一行像這樣的命令:

如:

set key1 0 60 5
value
STORED
add key2 0 500 2


STORED
replace key1 0 600 6
value1
NOT_STORED

詳細的命令說明,可以見附錄的memcached 中英文協議內容

讀取命令(get)

命令如下:get *\r\n

- * 表示一個或多個鍵值,由空格隔開的字串

如:

get key1

VALUE key1 0 7

value12

刪除命令(delete)

命令如:delete \r\n

是客戶端希望服務器刪除的內容的鍵名

- 是一個單位為秒的時間(或代表直到某一刻的Unix時間),在該時間內服務器會拒絕對於此鍵名的“add”和“replace”命令。此時內容被放入delete隊列,無法再通過“get”得到該內容,也無法是用“add”和“replace”命令(但是“set”命令可用)。直到指定時間,這些內容被最終從服務器的內存中徹底清除

參數是可選的,缺省為0(表示內容會立刻清除,並且隨后的存儲命令均可用

如:delete key1

退出命令(quit)

如:quit


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM