memcache使用手冊

Memcached 教程

Memcached是一個自由開源的,高性能,分布式內存對象緩存系統。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發的一款軟件。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴展性的重要因素。

Memcached是一種基于內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。

Memcached簡潔而強大。它的簡潔設計便于快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流行的開發語言。

本質上,它是一個簡潔的key-value存儲系統。

一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。

Memcached 官網:http://memcached.org/

特征

memcached作為高速運行的分布式緩存服務器,具有以下的特點。

協議簡單

基于libevent的事件處理

內置內存存儲方式

memcached不互相通信的分布式

支持的語言

許多語言都實現了連接memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網站上列出的有:

Perl

PHP

Python

Ruby

C#

C/C++

Lua

等等

Memcached 用戶

LiveJournal

Wikipedia

Flickr

Bebo

Twitter

Typepad

Yellowbot

Youtube

WordPress.com

Craigslist

Mixi

Linux Memcached 安裝

Memcached 支持許多平臺:Linux、FreeBSD、Solaris、Mac OS,也可以安裝在Windows上。

Linux系統安裝memcached,首先要先安裝libevent庫。

sudo apt-get install libevent libevent-deve? ? ? ? ? 自動下載安裝(Ubuntu/Debian)yum install libevent libevent-deve? ? ? ? ? ? ? ? ? ? ? 自動下載安裝(Redhat/Fedora/Centos)

安裝 Memcached

自動安裝

Ubuntu/Debian

sudo apt-get install memcached

Redhat/Fedora/Centos

yum install memcached

FreeBSD

portmaster databases/memcached

源代碼安裝

從其官方網站(http://memcached.org)下載memcached最新版本。

wget http://memcached.org/latest ? ? ? ? ? ? ? ? ? ?下載最新版本

tar -zxvf memcached-1.x.x.tar.gz ? ? ? ? ? ? ? ? ? ?解壓源碼

cd memcached-1.x.x ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?進入目錄

./configure --prefix=/usr/local/memcached ? ? ? ? ? 配置

make && make test ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 編譯

sudo make install ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 安裝

Memcached 運行

Memcached命令的運行:

$ /usr/local/memcached/bin/memcached -h? ? ? ? ? ? ? ? ? ? ? ? ? 命令幫助

注意:如果使用自動安裝 memcached 命令位于?/usr/local/bin/memcached

啟動選項:

-d是啟動一個守護進程;

-m是分配給Memcache使用的內存數量,單位是MB;

-u是運行Memcache的用戶;

-l是監聽的服務器IP地址,可以有多個地址;

-p是設置Memcache監聽的端口,,最好是1024以上的端口;

-c是最大運行的并發連接數,默認是1024;

-P是設置保存Memcache的pid文件。

(1)作為前臺程序運行:

從終端輸入以下命令,啟動memcached:

/usr/local/memcached/bin/memcached -p 11211 -m 64m -vv

slab class ? 1: chunk size ? ? 88 perslab 11915

slab class ? 2: chunk size ? ?112 perslab ?9362

slab class ? 3: chunk size ? ?144 perslab ?7281

中間省略

slab class ?38: chunk size 391224 perslab ? ? 2

slab class ?39: chunk size 489032 perslab ? ? 2

<23 server listening

<24 send buffer was 110592, now 268435456

<24 server listening (udp)

<24 server listening (udp)

<24 server listening (udp)

<24 server listening (udp)

這里顯示了調試信息。這樣就在前臺啟動了memcached,監聽TCP端口11211,最大內存使用量為64M。調試信息的內容大部分是關于存儲的信息。

(2)作為后臺服務程序運行:

# /usr/local/memcached/bin/memcached -p 11211 -m 64m -d

或者

/usr/local/memcached/bin/memcached -d -m 64M -u root -l 192.168.0.200 -p 11211 -c 256 -P /tmp/memcached.pid

Window 下安裝 Memcached

官網上并未提供 Memcached 的Window平臺安裝包,我們可以使用以下鏈接來下載,你需要根據自己的系統平臺及需要的版本號點擊對應的鏈接下載即可:

32位系統 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin.zip

32位系統 1.2.6版本:http://static.runoob.com/download/memcached-1.2.6-win32-bin.zip

32位系統 1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip

64位系統 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip

32位系統 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-x86.zip

64位系統 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-amd64.zip

在 1.4.5 版本以前 memcached 可以作為一個服務安裝,而在 1.4.5 及之后的版本刪除了該功能。因此我們以下介紹兩個不同版本 1.4.4 及 1.4.5的不同安裝方法:

memcached <1.4.5 版本安裝

1、解壓下載的安裝包到指定目錄。

2、在 1.4.5 版本以前 memcached 可以作為一個服務安裝,使用管理員權限運行以下命令:

c:\memcached\memcached.exe -d install

注意:你需要使用真實的路徑替代 c:\memcached\memcached.exe。

3、然后我們可以使用以下命令來啟動和關閉 memcached 服務:

c:\memcached\memcached.exe -d start

c:\memcached\memcached.exe -d stop

4、如果要修改 memcached 的配置項, 可以在命令行中執行 regedit.exe 命令打開注冊表并找到 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached" 來進行修改。

如果要提供 memcached 使用的緩存配置 可以修改 ImagePath 為:

"c:\memcached\memcached.exe" -d runservice -m 512

-m 512 意思是設置 memcached 最大的緩存配置為512M。

此外我們還可以通過使用 "c:\memcached\memcached.exe -h" 命令查看更多的參數配置。

5、如果我們需要卸載 memcached ,可以使用以下命令:

c:\memcached\memcached.exe -d uninstall

memcached >= 1.4.5 版本安裝

1、解壓下載的安裝包到指定目錄。

2、在 memcached1.4.5 版本之后,memcached 不能作為服務來運行,需要使用任務計劃中來開啟一個普通的進程,在 window 啟動時設置 memcached自動執行。

我們使用管理員身份執行以下命令將 memcached 添加來任務計劃表中:

schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"

注意:你需要使用真實的路徑替代 c:\memcached\memcached.exe。

注意:-m 512 意思是設置 memcached 最大的緩存配置為512M。

注意:我們可以通過使用 "c:\memcached\memcached.exe -h" 命令查看更多的參數配置。

3、如果需要刪除 memcached 的任務計劃可以執行以下命令:

schtasks /delete /tn memcached

Memcached 連接

我們可以通過 telnet 命令并指定主機ip和端口來連接 Memcached 服務。

語法

telnet HOST PORT

命令中的 HOST 和 PORT 為運行 Memcached 服務的 IP 和 端口。

實例

以下實例演示了如何連接到 Memcached 服務并執行簡單的 set 和 get 命令。

本實例的 Memcached 服務運行的主機為 127.0.0.1(本機) 、端口為 11211。

telnet 127.0.0.1 11211

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

set foo 0 0 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 保存命令

bar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數據

STORED ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?結果

get foo ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 取得命令

VALUE foo 0 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數據

bar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數據

END ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 結束行

quit ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?退出

Memcached set 命令

Memcached set 命令用于將 value(數據值) 存儲在指定的 key(鍵) 中。

如果set的key已經存在,該命令可以更新該key所對應的原來的數據,也就是實現更新的作用。

語法:

set 命令的基本語法格式如下:

set key flags exptime bytes [noreply]?

value?

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外信息 。

exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)

bytes:在緩存中存儲的字節數

noreply(可選): 該參數告知服務器不需要返回數據

value:存儲的值(始終位于第二行)(可直接理解為key-value結構中的value)

實例

以下實例中我們設置:

key → runoob

flag → 0

exptime → 900 (以秒為單位)

bytes → 9 (數據存儲的字節數)

value → memcached

set runoob 0 900 9

memcached

STORED


get runoob

VALUE runoob 0 9

memcached


END

輸出

如果數據設置成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

ERROR:在保存失敗后輸出。

Memcached add 命令

Memcached add 命令用于將 value(數據值) 存儲在指定的 key(鍵) 中。

如果 add 的 key 已經存在,則不會更新數據(過期的 key 會更新),之前的值將仍然保持相同,并且您將獲得響應 NOT_STORED。

語法:

add 命令的基本語法格式如下:

add key flags exptime bytes [noreply]

value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外信息 。

exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)

bytes:在緩存中存儲的字節數

noreply(可選): 該參數告知服務器不需要返回數據

value:存儲的值(始終位于第二行)(可直接理解為key-value結構中的value)

實例

以下實例中我們設置:

key → new_key

flag → 0

exptime → 900 (以秒為單位)

bytes → 10 (數據存儲的字節數)

value → data_value

add new_key 0 900 10

data_value

STORED

get new_key

VALUE new_key 0 10

data_value

END

輸出

如果數據添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED :在保存失敗后輸出。

Memcached replace 命令

Memcached replace 命令用于替換已存在的 key(鍵) 的 value(數據值)。

如果 key 不存在,則替換失敗,并且您將獲得響應 NOT_STORED。

語法:

replace 命令的基本語法格式如下:

replace key flags exptime bytes [noreply]

value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外信息 。

exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)

bytes:在緩存中存儲的字節數

noreply(可選): 該參數告知服務器不需要返回數據

value:存儲的值(始終位于第二行)(可直接理解為key-value結構中的value)

實例

以下實例中我們設置:

key → mykey

flag → 0

exptime → 900 (以秒為單位)

bytes → 10 (數據存儲的字節數)

value → data_value

以下實例中我們使用的鍵位 'mykey' 并存儲對應的值 data_value。執行后我們替換相同的 key 的值為 'some_other_value'。

add mykey 0 900 10

data_value

STORED

get mykey

VALUE mykey 0 10

data_value

END

replace mykey 0 900 16

some_other_value

get mykey

VALUE mykey 0 16

some_other_value

END

輸出

如果數據添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED:執行替換失敗后輸出。

Memcached append 命令

Memcached append 命令用于向已存在?key(鍵)?的?value(數據值)?后面追加數據 。

語法:

append 命令的基本語法格式如下:

append key flags exptime bytes [noreply]value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外信息 。

exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)

bytes:在緩存中存儲的字節數

noreply(可選): 該參數告知服務器不需要返回數據

value:存儲的值(始終位于第二行)(可直接理解為key-value結構中的value)

實例

實例如下:

首先我們在 Memcached 中存儲一個鍵 runoob,其值為 memcached。

然后,我們使用 get 命令檢索該值。

然后,我們使用?append?命令在鍵為 runoob 的值后面追加 "redis"。

最后,我們再使用 get 命令檢索該值。

set runoob 0 900 9memcached

STOREDget runoob

VALUE runoob 0 9memcachedENDappend runoob 0 900 5redis

STOREDget runoob

VALUE runoob 0 14memcachedredisEND

輸出

如果數據添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED:該鍵在 Memcached 上不存在。

CLIENT_ERROR:執行錯誤。

Memcached prepend 命令

Memcached prepend 命令用于向已存在 key(鍵) 的 value(數據值) 前面追加數據 。

語法:

prepend 命令的基本語法格式如下:

prepend key flags exptime bytes [noreply]

value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外信息 。

exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)

bytes:在緩存中存儲的字節數

noreply(可選): 該參數告知服務器不需要返回數據

value:存儲的值(始終位于第二行)(可直接理解為key-value結構中的value)

實例

實例如下:

首先我們在 Memcached 中存儲一個鍵 runoob,其值為 memcached。

然后,我們使用 get 命令檢索該值。

然后,我們使用 prepend 命令在鍵為 runoob 的值后面追加 "redis"。

最后,我們再使用 get 命令檢索該值。

set runoob 0 900 9

memcached

STORED

get runoob

VALUE runoob 0 9

memcached

END

prepend runoob 0 900 5

redis

STORED

get runoob

VALUE runoob 0 14

redismemcached

END

輸出

如果數據添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED:該鍵在 Memcached 上不存在。

CLIENT_ERROR:執行錯誤。

Memcached CAS 命令

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于執行一個"檢查并設置"的操作

它僅在當前客戶端最后一次取值后,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。

檢查是通過cas_token參數進行的, 這個參數是Memcach指定給已經存在的元素的一個唯一的64位值。

語法:

CAS 命令的基本語法格式如下:

cas key flags exptime bytes unique_cas_token [noreply]

value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外信息 。

exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)

bytes:在緩存中存儲的字節數

unique_cas_token通過 gets 命令獲取的一個唯一的64位值。

noreply(可選): 該參數告知服務器不需要返回數據

value:存儲的值(始終位于第二行)(可直接理解為key-value結構中的value)

實例

要在 Memcached 上使用 CAS 命令,你需要從 Memcached 服務商通過 gets 命令獲取令牌(token)。

gets 命令的功能類似于基本的 get 命令。兩個命令之間的差異在于,gets 返回的信息稍微多一些:64 位的整型值非常像名稱/值對的 "版本" 標識符。

實例步驟如下:

如果沒有設置唯一令牌,則 CAS 命令執行錯誤。

如果鍵 key 不存在,執行失敗。

添加鍵值對。

通過 gets 命令獲取唯一令牌。

使用 cas 命令更新數據

使用 get 命令查看數據是否更新

cas tp 0 900 9

ERROR ? ? ? ? ? ? <? 缺少 token


cas tp 0 900 9 2

memcached

NOT_FOUND ? ? ? ? <? 鍵 tp 不存在


set tp 0 900 9

memcached

STORED


gets tp

VALUE tp 0 9 1

memcached

END


cas tp 0 900 5 1

redis

STORED


get tp

VALUE tp 0 5

redis

END

輸出

如果數據添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

ERROR:保存出錯或語法錯誤。

EXISTS:在最后一次取值后另外一個用戶也在更新該數據。

NOT_FOUND:Memcached 服務上不存在該鍵值。

Memcached get 命令

Memcached get 命令獲取存儲在 key(鍵) 中的 value(數據值) ,如果 key 不存在,則返回空。

語法:

get 命令的基本語法格式如下:

get key

多個 key 使用空格隔開,如下:

get key1 key2 key3

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

實例

在以下實例中,我們使用 runoob 作為 key,過期時間設置為 900 秒。

set runoob 0 900 9

memcached

STORED

get runoob

VALUE runoob 0 9

memcached

END

Memcached gets 命令

Memcached gets 命令獲取帶有 CAS 令牌存 的 value(數據值) ,如果 key 不存在,則返回空。

語法:

gets 命令的基本語法格式如下:

gets key

多個 key 使用空格隔開,如下:

gets key1 key2 key3

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

實例

在以下實例中,我們使用 runoob 作為 key,過期時間設置為 900 秒。

set runoob 0 900 9

memcached

STORED

gets runoob

VALUE runoob 0 9 1

memcached

END

在 使用 gets 命令的輸出結果中,在最后一列的數字 1 代表了 key 為 runoob 的 CAS 令牌。

Memcached delete 命令

Memcached delete 命令用于刪除已存在的 key(鍵)。

語法:

delete 命令的基本語法格式如下:

delete key [noreply]

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

noreply(可選): 該參數告知服務器不需要返回數據

實例

在以下實例中,我們使用 runoob 作為 key,過期時間設置為 900 秒。之后我們使用 delete 命令刪除該 key。

set runoob 0 900 9memcached

STOREDget runoob

VALUE runoob 0 9memcachedENDdelete runoob

DELETEDget runoobENDdelete runoob

NOT_FOUND

輸出

輸出信息說明:

DELETED:刪除成功。

ERROR:語法錯誤或刪除失敗。

NOT_FOUND:key 不存在。

Memcached incr 與 decr 命令

Memcached incr 與 decr 命令用于對已存在的 key(鍵) 的數字值進行自增或自減操作。

incr 與 decr 命令操作的數據必須是十進制的32位無符號整數。

如果 key 不存在返回?NOT_FOUND,如果鍵的值不為數字,則返回?CLIENT_ERROR,其他錯誤返回?ERROR

incr 命令

語法:

incr 命令的基本語法格式如下:

incr key increment_value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

increment_value: 增加的數值。

實例

在以下實例中,我們使用 visitors 作為 key,初始值為 10,之后進行加 5 操作。

set visitors 0 900 210STOREDget visitors

VALUE visitors 0 210ENDincr visitors 515get visitors

VALUE visitors 0 215END

輸出

輸出信息說明:

NOT_FOUND:key 不存在。

CLIENT_ERROR:自增值不是對象。

ERROR其他錯誤,如語法錯誤等。

decr 命令

decr 命令的基本語法格式如下:

decr key decrement_value

參數說明如下:

key:鍵值 key-value 結構中的 key,用于查找緩存值。

decrement_value: 減少的數值。

實例

set visitors 0 900 210STOREDget visitors

VALUE visitors 0 210ENDdecr visitors 55get visitors

VALUE visitors 0 15END

在以下實例中,我們使用 visitors 作為 key,初始值為 10,之后進行減 5 操作。

輸出

輸出信息說明:

NOT_FOUND:key 不存在。

CLIENT_ERROR:自增值不是對象。

ERROR其他錯誤,如語法錯誤等。

Memcached stats 命令

Memcached stats 命令用于返回統計信息例如 PID(進程號)、版本號、連接數等。

語法:

stats 命令的基本語法格式如下:

stats

實例

在以下實例中,我們使用了 stats 命令來輸出 Memcached 服務信息。

stats

STAT pid 1162STAT uptime 5022STAT time 1415208270STAT version 1.4.14STAT libevent 2.0.19-stable

stats

STAT pid 1162

STAT uptime 5022

STAT time 1415208270

STAT version 1.4.14

STAT libevent 2.0.19-stable

STAT pointer_size 64

STAT rusage_user 0.096006

STAT rusage_system 0.152009

STAT curr_connections 5

STAT total_connections 6

STAT connection_structures 6

STAT reserved_fds 20

STAT cmd_get 6

STAT cmd_set 4

STAT cmd_flush 0

STAT cmd_touch 0

STAT get_hits 4

STAT get_misses 2

STAT delete_misses 1

STAT delete_hits 1

STAT incr_misses 2

STAT incr_hits 1

STAT decr_misses 0

STAT decr_hits 1

STAT cas_misses 0

STAT cas_hits 0

STAT cas_badval 0

STAT touch_hits 0

STAT touch_misses 0

STAT auth_cmds 0

STAT auth_errors 0

STAT bytes_read 262

STAT bytes_written 313

STAT limit_maxbytes 67108864

STAT accepting_conns 1

STAT listen_disabled_num 0

STAT threads 4

STAT conn_yields 0

STAT hash_power_level 16

STAT hash_bytes 524288

STAT hash_is_expanding 0

STAT expired_unfetched 1

STAT evicted_unfetched 0

STAT bytes 142

STAT curr_items 2

STAT total_items 6

STAT evictions 0

STAT reclaimed 1

END

這里顯示了很多狀態信息,下邊詳細解釋每個狀態項:

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:已過期的數據條目來存儲新數據的數目

Memcached stats items 命令

Memcached stats items 命令用于顯示各個 slab 中 item 的數目和存儲時長(最后一次訪問距離現在的秒數)。

語法:

stats items 命令的基本語法格式如下:

stats items

實例

stats items

STAT items:1:number 1

STAT items:1:age 7

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

STAT items:1:reclaimed 0

STAT items:1:expired_unfetched 0

STAT items:1:evicted_unfetched 0

END

Memcached stats slabs 命令

Memcached stats slabs 命令用于顯示各個slab的信息,包括chunk的大小、數目、使用情況等。

語法:

stats slabs 命令的基本語法格式如下:

stats slabs

實例

stats slabs

STAT 1:chunk_size 96

STAT 1:chunks_per_page 10922

STAT 1:total_pages 1

STAT 1:total_chunks 10922

STAT 1:used_chunks 1

STAT 1:free_chunks 10921

STAT 1:free_chunks_end 0

STAT 1:mem_requested 71

STAT 1:get_hits 0

STAT 1:cmd_set 1

STAT 1:delete_hits 0

STAT 1:incr_hits 0

STAT 1:decr_hits 0

STAT 1:cas_hits 0

STAT 1:cas_badval 0

STAT 1:touch_hits 0

STAT active_slabs 1

STAT total_malloced 1048512

END

Memcached stats sizes 命令

Memcached stats sizes 命令用于顯示所有item的大小和個數。

該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數。

語法:

stats sizes 命令的基本語法格式如下:

stats sizes

實例

stats sizes

STAT 96 1

END

Memcached flush_all 命令

Memcached flush_all 命令用于用于清理緩存中的所有?key=>value(鍵=>值)?對。

該命令提供了一個可選參數?time,用于在制定的時間后執行清理緩存操作。

語法:

flush_all 命令的基本語法格式如下:

flush_all [time] [noreply]

實例

清理緩存:

set runoob 0 900 9memcached

STOREDget runoob

VALUE runoob 0 9memcachedENDflush_all

OKget runoobEND

使用Python操作memcache

Python連接memcached的庫有很多,處于簡單以及高效的原則,最終選擇了pymemcache,

優點

完全實現了memcached text協議

對于send/recv操作可以配置timeout

支持"noreply"特性,該可行可以先出的提高寫的速度

使序列化/反序列化更簡單

可以將網絡異常,memecached錯誤當成是緩存丟失

安裝pymemcache

pip install pymemcache

使用pymemcache

基本操作

[python] view plain copy

from pymemcache.client.base import Client ?

client = Client(('localhost', 11211)) ?

client.set('some_key', 'some_value') ?

result = client.get('some_key') ?

使用memcache集群

使用一致性HASH算法支持集群

[python] view plain copy

from pymemcache.client.hash import HashClient ?

client = HashClient([('127.0.0.1', 11211),('127.0.0.1', 11212)]) ?

client.set('some_key', 'some value') ?

result = client.get('some_key') ?

序列化操作

[python] view plain copy

import json ?

from pymemcache.client.base import Client ?

def json_serializer(key, value):if type(value)== str:return value

? ? ?return json.dumps(value)

def json_deserializer(key, value, flags):if flags == 1:return value ?

? ? if flags == 2:return json.loads(value)raiseException("Unknown serialization format") ?

client = Client(('localhost', 11211), serializer=json_serializer, ?

? ? ? ? ? ? ? ? deserializer=json_deserializer) ?

client.set('key',{'a':'b', 'c':'d'}) ?

result = client.get('key') ?

最佳實踐

在構造Client時,添加timeout 的配置,防止block操作

使用“noreply”來提高性能,默認情況下改屬性在“set”, “add”, “replace”, “append”, “prepend”, and “delete”.操作時是開啟的,“cas”, “incr” and “decr”.操作時關閉的

盡可能的使用get_many以及gets_many操作,來減少round trip的操作實踐

使用“ignore_exc” 屬性,將網絡異常,memecached錯誤當成是緩存丟失

主要URL:

pypi:https://pypi.python.org/pypi/pymemcache

官方文檔: https://pymemcache.readthedocs.io/en/latest/getting_started.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容