緩存學習(三):MemCached安裝、配置和命令

目錄

1.安裝

2.使用

2.1 常用選項

2.2 命令格式

2.3 命令


EhCache和Guava Cache雖然簡單、高效,但是它們都是本地緩存(EhCache可以分佈式部署,但是需要依賴Terracotta,顯然不利於維護),一般只是用在單個應用程序實例內部。在實際的分佈式系統中,緩存更多地用於緩存數據庫的熱點數據,以減輕數據庫負擔,常用的分佈式緩存有Redis和Memcached。MemCached是一個開源、高性能的分佈式內存對象緩存系統,在許多互聯網公司都有應用。

1.安裝

Memcached可以運行在Linux和Windows平臺上,這裏以Linux爲例。首先需要去官網下載安裝包(目前最新的是1.5.12版本):

wget https://memcached.org/latest

然後解壓:

tar -zxvf memcached-1.5.12.tar.gz

此時還不能進行安裝,需要先安裝依賴組件libevent-dev:

sudo apt-get install libevent-dev

然後進入解壓後的目錄,執行configure文件,這裏按照官方示例,只配置了prefix屬性,即安裝目錄:

./configure --prefix=/usr/local/memcached

在memcached安裝包解壓後的目錄下運行以下命令可以查看configure文件的所有可配置項:

./configure --help

然後使用make進行編譯和安裝:

make && sudo make install

由於Memcached沒有自動加環境變量,這裏我們在~/.bashrc中配置一下別名:

sudo vim ~/.bashrc

在文件中輸入 alias memcached="/usr/local/memcached/bin/memcached"並保存退出。最後刷新一下配置:

source ~/.bashrc

現在可以使用 memcached -h 命令驗證是否安裝成功,如果能夠成功輸出幫助信息,說明安裝已經成功。

2.使用

2.1 常用選項

首先來看一下memcached提供的一些常用選項。

  • -p port 或 --port=<port>:指定監聽的TCP端口,默認11211(粗斜體代表可替換內容,下同)
  • -U port 或 --udp-port=<port>:指定監聽的UDP端口,默認爲0,即不開啓
  • -l host 或 --listen=<host>:指定監聽的主機IP地址,如果是本機可以不寫
  • -u user 或 --user=<user>:設置運行Memcached實例的用戶
  • -m limit 或 --memory-limit=<limit>:設置存儲數據用的內存容量(不包括Memcached本身佔用的),單位MB
  • -c num 或 --conn-limit=<num>:設置最大連接數,默認1024
  • -M 或 --disable-evictions:禁用自動緩存清除(LRU策略),在內存不足時報錯
  • -P file 或 --pidfile=<file>:將進程PID保存到文件中,必須配合-d選項(開啓後臺模式)使用
  • -t num 或 --threads=<num>:設置Memcached線程數,和Redis不同,Memcached支持多線程,默認爲4,建議設置爲和本機CPU數量一致
  • -L 或 --enable-largepages:啓用大內存頁,可以提高性能
  • -f num 或 --slab-growth-factor=<num>:增長因子,默認1.25
  • -R 或 --max-reqs-per-event:單個事件的最大連接數,默認20
  • -C 或 --disable-cas:禁用CAS命令,可以減少開銷

除此之外還有很多命令,此外,-o 或 --extended 選項還有很多擴展選項,不做詳細介紹了。

下面是一個啓動Memcached實例的命令:

memcached -d -m 512 -u root -P /usr/local/memcached/memcached.pid

啓動之後可以通過 ps -el 看到memcached進程在運行。和Redis不同,Memcached沒有提供客戶端程序,而是需要使用telnet進行連接:

ubuntu@VM-0-6-ubuntu:~$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

2.2 命令格式

Memcached命令的基本格式如下:

command key flags exptime bytes value

含義爲:

  • command:操作命令,有set、add、get、delete等
  • key:緩存數據的鍵,最大長度250個字符
  • flags:用於標識數據序列化格式
  • exptime:緩存數據的存活時間,單位爲秒,0代表不過期
  • bytes:緩存數據的大小,單位爲字節
  • value:緩存數據的值

2.3 命令

1) set

set命令用來將數據值存儲到指定的key中,如果key已存在,則進行更新。設置成功後,會返回STORED。該命令有一個額外的可選選項:noreply,表示不需要服務器返回數據。下面是測試的例子(爲了方便閱讀,在每組命令之間多打了一個空行,實際是沒有的):

set userid 0 0 5
00001
STORED

get userid
VALUE userid 0 5
00001
END

set userid 0 0 5 noreply
00002

get userid
VALUE userid 0 5
00002
END

如果保存失敗,會輸出ERROR

2) get

get命令可以獲取單個或多個key關聯的值,上面的例子中演示了單個key的獲取,多個key的格式如下:

get key1 key2 ...

3) add

add類似於set,只是如果要設置的key已經存在,則不會更新值,拿Java中的Map來比較,set就是put方法,add就是putIfAbsent方法。命令格式和set也一樣。

4) replace

replace僅用於更新值,如果要更新的key不存在,則返回NOT_STORED,否則返回STORED

5)append、prepend

 append用於向已存在的數據後面追加值,prepend則相反,用於在數據前面追加值:

add userid 0 0 5
00001
STORED
append userid 0 0 5
00002
STORED
get userid
VALUE userid 0 10
0000100002
END

append或pretend時,bytes字段只需要計算追加部分的長度即可,不需要計算總長度

6)delete

delete命令用於刪除指定的緩存數據,數據不存在則返回NOT_FOUND,刪除成功返回DELETED,失敗返回ERROR

7)incr/decr

incr/decr命令可以對數字值進行修改,令其增大或減少指定數量,命令格式如下:

incr key increment
decr key decrement

示例:

add usercount 0 0 1
1
STORED
incr usercount 100
101
get usercount 
VALUE usercount 0 3
101
END

可以看到,如果增加/減少成功,會返回新的數值,並且會自動增大緩存數據的長度,如果key不存在,則返回NOT_FOUND,如果key對應的value不是數值,則返回CLIENT_ERROR,其他錯誤返回ERROR。

8)CAS操作:cas、gets

CAS是併發領域的常見概念,其原理不需要多介紹。Memcached的cas命令就是在沒有其他客戶端寫入的情況下才進行值的寫入,命令格式如下:

cas key flags exptime bytes version
value

這裏的versiob需要使用gets命令來獲取,gets和get命令使用基本一致,只是返回內容多了一列,即version。完整示例如下:

gets usercount
VALUE usercount 0 3 16
201
END
cas usercount 0 0 3 16
300
STORED
get usercount
VALUE usercount 0 3
300
END

9)統計

統計命令有四個:stats(輸出服務器信息)、stats items(輸出各slabs中緩存元素的數目及最後一次訪問後過去的時間)、stats slabs(顯示slab的信息,如chunk大小、數目、佔用及空閒情況、命中情況等)、stats sizes(顯示所有item的大小和個數)

10)清理

Memcached提供了flush_all命令,可以清除所有緩存數據,還允許延時操作,其命令格式如下:

flush_all [time] [noreply]

time表示多少時間後再執行清除操作,是一個數字,單位爲秒

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章