Linux Distribution:Ubuntu 14
Libevent:1.4.14b
下載地址:libevent官網
Memcached:1.4.25
下載地址:memcached官網
一,安裝memcached
Memcached的安裝依賴Libevent,首先安裝Libevent:
sean@sean:~$ tar -xzf libevent-1.4.14b-stable.tar.gz sean@sean:~$ cd libevent-1.4.14b-stable/sean@sean:~/libevent-1.4.14b-stable$ sudo ./configure -prefix /usrsean@sean:~/libevent-1.4.14b-stable$ sudo makesean@sean:~/libevent-1.4.14b-stable$ sudo make installsean@sean:~/libevent-1.4.14b-stable$ sudo make clean
Libevent將會被安裝至/usr/lib下
sean@sean:/usr/lib$ cd /usr/lib/sean@sean:/usr/lib$ ll | grep libevent*Binary file libevent-1.4.so.2.2.0 matcheslibevent.la:dlname='libevent-1.4.so.2'libevent.la:library_names='libevent-1.4.so.2.2.0 libevent-1.4.so.2 libevent.so'Binary file libevent.so matches
然後安裝Memcached:
sean@sean:~$ tar -xzf memcached-1.4.25.tar.tarsean@sean:~$ cd memcached-1.4.25/sean@sean:~/memcached-1.4.25$ sudo ./configure -with-libevent=/usrsean@sean:~/memcached-1.4.25$ sudo makesean@sean:~/memcached-1.4.25$ sudo make installsean@sean:~/memcached-1.4.25$ sudo make clean
Memcached將會被安裝至/usr/local/bin下:
sean@sean:/usr/local/bin$ lltotal 544drwxr-xr-x 2 root root 4096 4月 21 21:32 ./drwxr-xr-x 10 root root 4096 2月 18 07:12 ../-rwxr-xr-x 1 root root 545998 4月 21 21:32 memcached*
二,啟動memcached服務
-m:分配給memcached的最大記憶體,以M為單位
-p:服務監聽的TCP連接埠,預設值是11211
-d:服務當做守護進程啟動
-vv:列印詳細資料
-f:增長因子,預設值是1.25,指定的值必須比1大
sean@sean:/usr/local/bin$ ./memcached -m 64 -p 9999 -d -vvsean@sean:/usr/local/bin$ slab class 1: chunk size 96 perslab 10922slab class 2: chunk size 120 perslab 8738slab class 3: chunk size 152 perslab 6898slab class 4: chunk size 192 perslab 5461slab class 5: chunk size 240 perslab 4369slab class 6: chunk size 304 perslab 3449slab class 7: chunk size 384 perslab 2730slab class 8: chunk size 480 perslab 2184slab class 9: chunk size 600 perslab 1747slab class 10: chunk size 752 perslab 1394slab class 11: chunk size 944 perslab 1110slab class 12: chunk size 1184 perslab 885slab class 13: chunk size 1480 perslab 708slab class 14: chunk size 1856 perslab 564slab class 15: chunk size 2320 perslab 451slab class 16: chunk size 2904 perslab 361slab class 17: chunk size 3632 perslab 288slab class 18: chunk size 4544 perslab 230slab class 19: chunk size 5680 perslab 184slab class 20: chunk size 7104 perslab 147slab class 21: chunk size 8880 perslab 118slab class 22: chunk size 11104 perslab 94slab class 23: chunk size 13880 perslab 75slab class 24: chunk size 17352 perslab 60slab class 25: chunk size 21696 perslab 48slab class 26: chunk size 27120 perslab 38slab class 27: chunk size 33904 perslab 30slab class 28: chunk size 42384 perslab 24slab class 29: chunk size 52984 perslab 19slab class 30: chunk size 66232 perslab 15slab class 31: chunk size 82792 perslab 12slab class 32: chunk size 103496 perslab 10slab class 33: chunk size 129376 perslab 8slab class 34: chunk size 161720 perslab 6slab class 35: chunk size 202152 perslab 5slab class 36: chunk size 252696 perslab 4slab class 37: chunk size 315872 perslab 3slab class 38: chunk size 394840 perslab 2slab class 39: chunk size 493552 perslab 2slab class 40: chunk size 616944 perslab 1slab class 41: chunk size 771184 perslab 1slab class 42: chunk size 1048576 perslab 1<26 server listening (auto-negotiate)<27 server listening (auto-negotiate)<28 send buffer was 212992, now 268435456<32 send buffer was 212992, now 268435456<31 server listening (udp)<35 server listening (udp)<30 server listening (udp)<34 server listening (udp)<29 server listening (udp)<33 server listening (udp)<28 server listening (udp)<32 server listening (udp)
從日誌資訊中,我們可以瞭解到很多東西
首先就是memcached的記憶體管理機制,memcached會將記憶體分為數個大小相等的slab,每個slab又按固定大小分成數個chunk,隨著slab編號的增加,slab中chunk的大小按一定比率增長
從日誌中可以看到,memcached將記憶體分為了42個大小均為1M的slab,而每個slab又分為大小相同的數個chunk,比如slab1中每個chunk的大小為120B,slab1中總共有8738個這樣的chunk,而slab42中每個chunk的大小為1M,所以slab42中只能有一個chunk,隨著slab編號的增加,slab中chunk的大小按1.25的比率增長(slab1:120,slab2:150,150/120=1.25,正好是-f指定的增長因子的預設值)
slab5中每個chunk的大小為240B,當我要存放200B的資料時,則會選擇slab5中的一個chunk存放資料,如果slab5中的chunk都被使用了怎麼辦。沒關係,找到一個最近最少使用(LRU:least recently used)的chunk,將新資料存入其中,即使slab6中有閒置chunk,因此當memcached中儲存資料的大小基本一致時,增長因子過大將導致memcahed的記憶體使用量率並不是很高
查看進程探索服務啟動成功:
sean@sean:/usr/local/bin$ ps -ef|grep memcachedsean 17944 8981 0 21:28 ? 00:00:00 ./memcached -m 64 -p 9999 -u root -d -vvvsean 17951 14900 0 21:28 pts/15 00:00:00 grep --color=auto memcached
三,基本memcached命令
由於memcached服務監聽9999連接埠,我們可以通過telnet的方式串連至memcached
sean@sean:~$ telnet 127.0.0.1 9999Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.
之後可以通過輸入相應的命令進行操作
新增:add key flag expire length
add name 1 0 4seanSTORED
flag必須為一個正整數,將對象、數組序列化後存入緩衝,當需要取出時,還需還原序列化,這時可根據flag的值進行相應的還原序列化,比如flag的值是1,不需要還原序列化,值為2,還原序列化對象,值為3,還原序列化數組
length為緩衝的位元組長度
查詢:get key
get nameVALUE name 1 4seanEND
刪除:delete key
delete nameDELETED
替換(key必須存在才能替換):replace key flag expire length
設定(key不存在執行新增,key存在執行替換):set key flag expire length
查看狀態:stat
statsSTAT pid 18178STAT uptime 1160STAT time 1463495507STAT version 1.4.25STAT libevent 1.4.14b-stableSTAT pointer_size 64STAT rusage_user 0.000000STAT rusage_system 0.040000STAT curr_connections 10STAT total_connections 11STAT connection_structures 11STAT reserved_fds 20STAT cmd_get 6STAT cmd_set 7STAT cmd_flush 0STAT cmd_touch 0STAT get_hits 4STAT get_misses 2STAT delete_misses 0STAT delete_hits 2STAT incr_misses 0STAT incr_hits 0STAT decr_misses 0STAT decr_hits 0STAT cas_misses 0STAT cas_hits 0STAT cas_badval 0STAT touch_hits 0STAT touch_misses 0STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 264STAT bytes_written 203STAT limit_maxbytes 67108864STAT accepting_conns 1STAT listen_disabled_num 0STAT time_in_listen_disabled_us 0STAT threads 4STAT conn_yields 0STAT hash_power_level 16STAT hash_bytes 524288STAT hash_is_expanding 0STAT malloc_fails 0STAT bytes 73STAT curr_items 1STAT total_items 6STAT expired_unfetched 0STAT evicted_unfetched 0STAT evictions 0STAT reclaimed 0STAT crawler_reclaimed 0STAT crawler_items_checked 0STAT lrutail_reflocked 0END
通過get_hits/(get_hits + get_misses)能夠計算出快取命中率