1. 程式人生 > >Memcached 安裝配置 & 基本指令

Memcached 安裝配置 & 基本指令

Memcached 

Memcached 簡介

Memcached是一個開源、高效能、分散式記憶體物件快取系統,同樣是一個記憶體 key-value 資料庫,常常用在各種快取業務上,與 redis 相比,memcached 雖然不支援那麼豐富的 value 資料型別,也不支援資料持久化,但是由於結構簡潔,在二次開發上更加簡單,具有更好的拓展性;memcached 支援多平臺,包括:Linux,FreeBSD,Solaris,Mac OS,Windows 等;

Memcached 安裝配置

以下使用 Ubuntu、Debian 的 apt-get 工具進行快速安裝,也可以通過 webget 獲取 http://memcached.org/latest
 上的原始碼包自行編譯安裝;對於 Rehat 系的 Linux 系統(Fedora,CentOS)對應使用 yum 工具快速安裝,基本是一樣的;對於 memcahed 需要安裝 libevent 和 memcahed 兩個安裝包;
$ sudo apt-get update                # 更新 apt 庫
$ sudo apt-get install libevent      # 安裝 libevent 的二進位制包
$ sudo apt-get install memcached     # 安裝 memcached 的二進位制包
一般 apt-get 安裝的可執行程式位於 /usr/bin 目錄下,也可以通過 dkpg -L memcached 檢視 memcached 包的安裝目錄,可以直接通過 /user/bin memcached 啟動 memcached,也可以將該路徑寫到系統 PATH 變數中,方便啟動;

Memcached 啟動和引數

$ memcached          # 預設啟動 memcached
$ memcached -h       # 檢視 memcached 啟動引數說明
$ memcached -d       # 後臺啟動 memcahed
memcached 含有豐富的啟動引數,可以直接在啟動 memcached 時輸入對應的引數和引數值,也可以通過修改預設配置檔案來修改預設啟動引數,一般通過 apt-get 安裝的預設配置檔案在 /usr/share/memcached/memcached.conf.default ,可以通過 dpkg 指令查詢該檔案的位置;常用的引數如下:
  • -d    以守護程序(後臺程序)的方式啟動 ;

  • -m  分配給 Memcache 使用的記憶體上限,單位 MB,預設 64;
  • -u   執行 Memcache 的使用者,預設值 memcache;
  • -l    監聽的伺服器 IP 地址,可以有多個 IP,預設值 127.0.0.1;
  • -p   監聽的埠,最好設定為 1024 以上的值,預設值 11211;
  • -c   最大執行的併發連線數,預設 1024;
  • -P 設定儲存 Memcache 的 pid檔案,當 memcahed 守護程序執行時,相關的 pid 會被寫入該檔案,需要確保 memcache 有讀寫該檔案的許可權;

Memcached 的終端連線

memcached 本身並沒有像 Redis 的 redis-cli 那樣的終端工具,可以通過系統的 telnet 連線 memcache-server,如下:
$ telnet 127.0.0.1 11211   # 終端連線 memcached
set key1 0 0 5       # 新增鍵值
assad
STOTRED
get key1             # 獲取鍵值
VALUE assad
END
quit                 # 推出 telnet 連線

Memcached 常用鍵值讀寫指令

可以通過終端連線 memcached,直接對其中儲存的鍵值資料進行操作;

儲存指令

setkey flags exptime bytes [noreply]
value
設定 key-value,如果 key 已經存在,則覆蓋該資料;
返回值 -- STORED:儲存成功; ERROR:儲存失敗
addkey flags exptime bytes [noreply]
value
設定 key-value,如果 key 已經存在,則不更新資料;
返回值 -- STORED:儲存成功; NOT_STORED:儲存失敗
replacekey flags exptime bytes [noreply]
value
替換 key-value,如果 key 已經存在,替換為新設定的 value;
返回值 -- STORED:儲存成功; NOT_STORED:儲存失敗
appendkey flags exptime bytes [noreply]
value
後追加 key-value,如果 key 已經存在,則在該 key 的 value 後追加資料;
返回值 -- STORED:儲存成功; NOT_STORED:儲存失敗; CLIENT_ERROR:執行錯誤
prependkey flags exptime bytes [noreply]
value
前追加 key-value,如果 key 已經存在,則在該 key 的 value 前面追加資料
返回值 -- STORED:儲存成功; NOT_STORED:儲存失敗; CLIENT_ERROR:執行錯誤
cas key flags exptime bytes unique_cas_token [noreply]
value
檢查並設定 key-value (check-and-set),僅在當前客戶端最後一次取值後,該 key 的 value 還沒有被客戶端修改的情況下,才能將該值寫入,檢查是通過 unique_cas_token 引數進行的,該引數是由 gets 獲取的唯一一個 64 位值
返回值 -- STORED:儲存成功; ERROR:儲存失敗;
                  EXISTS:在最後一次取值另外一個使用者也在更新該資料;
                  NOT_FOUND:不存在該資料;

以上指令中引數的說明如下:
  • key:key 欄位;
  • flags:可以包括鍵值對的整型引數,客戶端使用該引數值儲存鍵值對以外的資訊;
  • exptime:在快取中儲存鍵值對的時間長度,單位秒,0 表示永久;
  • bytes:value 在快取中儲存的位元組數;
  • noreply(可選):告知伺服器不需要返回資料;
  • value:儲存的 value 值(必須位於第二行);
以下是一個使用示例:
# 關於 cas 指令的示例
set user 0 0 5    # 寫入 user = assad
assad  
STORED
cas user 0 0 5 1  # 檢查並寫入 user = assad,cas令牌為1
vancy
EXIST             # cas 令牌無效
gets user          # 獲取 user,並返回一個 cas 值
VALUE user 0 5 4   # 該 user 的 cas 值為 4 
assad
END
cas user 0 0 5 4   # 通過 gets 獲取的 cas 令牌設定 user
vancy
STORED

查詢,刪除,更改指令

get key1  [ key2 key3 ...]獲取指定 key 的 value
gets key1  [ key2 key3 ...]獲取指定 key 的 value,包括該 key 的 exptime,bytes,和一個 cas 值;
del key1  [ key2 key3 ...]  [noreply]刪除指定 key
incr key increment_value
decr key decrement_value
對指定 key 儲存的 value執行自增,自減 操作,該 value 必須是十進位制32位無符號數值;

系統統計資訊指令

stats 輸出系統統計資訊,詳細的資訊列表說明如下
stats sizes顯示所有 items 的大小、個數
stats slabs顯示各個 slabs 資訊,包括 chunk 的大小、數目、使用情況等
stats items顯示各個 slab 中 items 的數目和空閒時長
flush_all [time] [noreply]清除快取中的所有鍵值,time 引數用於設定延遲執行時間,單位s

stats 指令返回的統計資訊列表:
  • pid: memcache伺服器程序ID
  • uptime:伺服器已執行秒數
  • time:伺服器當前Unix時間戳
  • version:memcache版本
  • pointer_size:作業系統指標大小
  • rusage_user:程序累計使用者時間
  • rusage_system:程序累計系統時間
  • curr_connections:當前連線數量
  • total_connections:Memcached執行以來連線總數
  • connection_structures:Memcached分配的連線結構數量
  • cmd_get:get命令請求次數
  • cmd_set:set命令請求次數
  • cmd_flush:flush命令請求次數
  • get_hits:get命令命中次數
  • get_misses:get命令未命中次數
  • delete_misses:delete命令未命中次數
  • delete_hits:delete命令命中次數
  • incr_misses:incr命令未命中次數
  • incr_hits:incr命令命中次數
  • decr_misses:decr命令未命中次數
  • decr_hits:decr命令命中次數
  • cas_misses:cas命令未命中次數
  • cas_hits:cas命令命中次數
  • cas_badval:使用擦拭次數
  • auth_cmds:認證命令處理的次數
  • auth_errors:認證失敗數目
  • bytes_read:讀取總位元組數
  • bytes_written:傳送總位元組數
  • limit_maxbytes:分配的記憶體總大小(位元組)
  • accepting_conns:伺服器是否達到過最大連線(0/1)
  • listen_disabled_num:失效的監聽數
  • threads:當前執行緒數
  • conn_yields:連線操作主動放棄數目
  • bytes:當前儲存佔用的位元組數
  • curr_items:當前儲存的資料總數
  • total_items:啟動以來儲存的資料總數
  • evictions:LRU釋放的物件數目
  • reclaimed:已過期的資料條目來儲存新資料的數目