首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Memcached 常用指令完整指南:儲存、讀取、狀態監控與進階操作

     編輯:PHP 相關知識

Memcached 是高效能分散式記憶體快取系統,掌握核心指令對開發與運維至關重要。本文系統整理儲存、讀取、狀態、進階四大類指令並附實操範例。

一、儲存指令

格式:<command> <key> <flags> <exptime> <bytes>\r\n<data>\r\n

參數說明
commandset/add/replace/append/prepend/cas
key查找鍵值,長度 < 250 字元
flags客戶端自定義標記 (0-2^32-1)
exptime存活秒數,0=永不過期,>30天視為 Unix 時間戳
bytes資料區塊位元組數
data block實際儲存的值

1. 新增/更新:set

set mykey 0 3600 10
myvalue123
STORED

特性:鍵不存在則新增,存在則覆蓋更新。使用頻率最高。

2. 僅新增:add

add newkey 0 3600 5
hello
STORED

特性:鍵已存在時回傳 NOT_STORED,不覆蓋。適合初始化、鎖機制。

3. 僅更新:replace

replace existing_key 0 3600 7
newdata
STORED

特性:鍵不存在時回傳 NOT_STORED。確保只更新現有資料。

4. 刪除:delete

delete mykey
DELETED

不存在時回傳 NOT_FOUND。

二、讀取指令

1. get:單/多鍵讀取

get key1 key2 key3
VALUE key1 0 5
hello
VALUE key2 0 5
world
END

2. gets:附帶 CAS token

gets mykey
VALUE mykey 0 5 13
hello
END

多輸出一個數字 (CAS token),資料變更時 token 會改變,配合 cas 實現樂觀鎖。

3. cas:檢查並設定 (Check-And-Set)

cas mykey 0 3600 5 13
world
STORED

最後一參數必須符合 gets 取得的 token,否則回傳 EXISTS。適用於高併發計數器等場景。

三、狀態監控指令

1. stats:總覽統計

stats
STAT pid 12345
STAT uptime 3600
STAT curr_items 1000
STAT total_items 5000
STAT bytes 1048576
STAT curr_connections 10
STAT total_connections 10000
STAT cmd_get 50000
STAT cmd_set 10000
STAT get_hits 45000
STAT get_misses 5000
STAT evictions 0
END

關鍵指標:get_hits/get_misses (命中率)、evictions (驅逐數)、bytes (記憶體使用)。

2. stats items:Slab 統計

stats items
STAT items:1:number 100
STAT items:1:age 3600
STAT items:1:evicted 0
STAT items:2:number 50
...
END

顯示各 slab class 的項目數、平均壽命、驅逐數。

3. stats cachedump:導出鍵值 (除錯用)

stats cachedump 1 0
ITEM key1 [10 b; 1234567890 s]
ITEM key2 [20 b; 1234567895 s]
END
  • slab_id:從 stats items 取得
  • limit_num:導出筆數,0=全部

⚠️ 生產環境慎用,大量資料會阻塞服務。

4. 其他 stats 子指令

  • stats slabs:Slab 分配詳情
  • stats sizes:項目大小分佈
  • stats reset:重置統計計數器

四、進階操作指令

1. append:尾部追加

append mykey 0 3600 6
_world
STORED

鍵不存在回傳 NOT_STORED。不更新 flags/exptime。

2. prepend:首部前置

prepend mykey 0 3600 6
hello_
STORED

3. incr/decr:數值原子增減

set counter 0 0 1
1
incr counter 5
6
decr counter 2
4

值必須為 64 位無號整數,超過範圍回傳錯誤。原子操作,適合計數器。

4. flush_all:清空所有資料

flush_all
OK
flush_all 10
OK
  • 可選參數:延遲秒數後執行
  • 懶惰刪除:不立即釋放記憶體,新資料寫入時清理
  • 現有項目在過期前仍可讀取,但會被忽略

實務操作建議

場景推薦指令注意事項
快取資料寫入set設定合理 exptime,避免永久佔用記憶體
分散式鎖add + delete利用 add 原子性,釋放用 delete
計數器incr/decr先用 set 初始化,原子遞增遞減
樂觀鎖更新gets + casCAS token 防止覆蓋衝突
Session 儲存setexptime 同 Session 生命週期
除錯檢視鍵值stats cachedump僅開發/測試環境使用

連線與客戶端提醒

  • 預設連接埠:11211
  • 支援 TCP/UDP,建議長連線 + 連線池
  • PHP 客戶端:Memcached (libmemcached) 優於舊版 Memcache
  • 多伺服器時使用一致性雜湊分佈鍵值
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved