MemCache 概述
MemCache雖然被稱爲”分佈式緩存”,但是MemCache本身完全不具備分佈式的功能
Memcache 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高了網站訪問的速度。 MemCaChe是一個存儲鍵值對的HashMap,在內存中對任意的數據(比如字符串、對象等)所使用的key-value存儲,數據可以來自數據庫調用、API調用,或者頁面渲染的結果。MemCache設計理念就是小而強大,它簡單的設計促進了快速部署、易於開發並解決面對大規模的數據緩存的許多難題,而所開放的API使得MemCache能用於Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序語言。
MemCache 安裝
Windows 下安裝 MemCache
- 點擊下載 安裝包
- 解壓下載後的文件
- 使用管理員身份運行cmd 並切換到上一步解壓後的目錄下, 運行命令
memcached -d install
來把memcache安裝爲系統服務, 運行命令memcached -d start
來啓動服務
- 如果成功,則可以在系統服務上看到 memcache 服務, memcache默認在localhost的11211端口上啓動了一個實例
- 在cmd 下輸入命令
telnet localhost 11211
來連接 memcache 實例
Ubuntu 下安裝 MemCache
- 使用命令
sudo apt-get install -y memcached
來安裝memcache - 安裝完成後默認會在 localhost:11211 上啓動一個默認實例
- 使用命令
ps aux | grep memcached
來查看是否正常運行
- 使用命令
telnet localhost 11211
來連接memcache實例
MemCache 常用命令
add
添加數據,將 value(數據值) 存儲在指定的 key(鍵) 中
命令格式
add key flag expiretime bytes
value
- key : 給這個值設置一個名字
- flag : 標誌,是一個整數
- expiretime : 有效期,以秒爲單位,0表示沒有延遲
- bytes : 這是一個需要存儲在memcached的數據的長度
- value : 是一個需要存儲的數據。數據需要將通過在新的一行後輸入
範例
# 添加數據
add name 0 1000 8
kangvcar
STORED
# 如果bytes設置的長度和輸入的value長度不符則出現一下錯誤
add name 0 1000 8
kangvcarrr
CLIENT_ERROR bad data chunk
set
爲一個新的或現有的鍵(key)設置一個值
命令格式
set key flag expiretime bytes
value
參數含義與 add 命令相同
範例
爲已存在的key(name)設置一個新的值tom
set name 0 1000 3
tom
STORED
replace
替換已存在的 key(鍵) 的 value(數據值)
命令格式
replace key flag expiretime bytes
value
參數含義與 add 命令相同
範例
replace name 0 1000 8
memcache
STORED
append
向已存在 key(鍵) 的 value(數據值) 後面追加數據
命令格式
append key flag expiretime bytes
value
參數含義與 add 命令相同
範例
# 添加數據123到現有鍵name的後面
append name 0 1000 3
123
STORED
# 查看鍵name的值
get name
VALUE name 0 11
memcache123
END
prepend
向已存在 key(鍵) 的 value(數據值) 前面追加數據
命令格式
prepend key flag expiretime bytes
value
參數含義與 add 命令相同
範例
prepend name 0 1000 3
456
STORED
get name
VALUE name 0 14
456memcache123
END
gets / cas
gets
獲取帶有 CAS 令牌的 value(數據值)
cas
執行一個"檢查並設置"的操作
命令格式
gets key
cas key flags exptime bytes unique_cas_token [noreply]
value
- unique_cas_token : 通過 gets 命令獲取的一個唯一的64位值
範例
# 缺少一個參數 unique_cas_token
cas name 0 1000 3
ERROR
# unique_cas_token 不正確
cas name 0 1000 3 2
sam
NOT_FOUND
# 通過 gets 命令獲取唯一令牌 ==> 12
gets name
VALUE name 0 8 12
kangvcar
END
# 使用 cas 命令更新數據
cas name 0 1000 3 12
sam
STORED
# 使用 get 命令查看數據是否更新
get name
VALUE name 0 3
sam
END
get
獲取存儲在 key(鍵) 中的 value(數據值)
命令格式
get key
範例
# 獲取存儲在鍵name的值
get name
VALUE name 0 14
456memcache123
END
delete
刪除已存在的 key(鍵)
命令格式
delete key
範例
delete age
DELETED
incr / decr
incr 與 decr 命令用於對已存在的 key(鍵) 的數字值進行自增或自減操作
命令格式
incr key increment_value
decr key increment_value
範例
# 添加數據
add age 0 1000 2
15
STORED
# 對已存在的鍵(age)數字值進行自增
incr age 5
20
# 獲取鍵age的值
get age
VALUE age 0 2
20
END
# 添加數據
add age 0 1000 2
15
STORED
# 對已存在的鍵(age)數字值進行自減
incr age 5
10
# 獲取鍵age的值
get age
VALUE age 0 2
10
END
flush_all
清理緩存中的所有數據
命令格式
flush_all [time]
- time : (可選) 在指定時間後執行清理緩存操作
範例
flush_all
OK
stats / stats slabs / stats sizes / stats items
stats
顯示統計信息例如 PID(進程號)、版本號、連接數等
stats slabs
顯示各個slab的信息,包括chunk的大小、數目、使用情況等
stats sizes
顯示所有item的大小和個數
stats items
顯示各個 slab 中 item 的數目和存儲時長
命令格式
stats
stats slabs
stats sizes
stats items
範例
stats
STAT pid 19700
STAT uptime 3054540758
STAT time 269361355
STAT version 1.4.4-14-g9c660c0
STAT pointer_size 64
...
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
...
stats sizes
STAT 96 2
END
stats items
STAT items:1:number 2
STAT items:1:age 3054540037
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
END