memcache使用手冊

Memcached 教程

Memcached是一個(gè)自由開源的,高性能,分布式內(nèi)存對象緩存系統(tǒng)。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發(fā)的一款軟件。現(xiàn)在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務(wù)中提高Web應(yīng)用擴(kuò)展性的重要因素。

Memcached是一種基于內(nèi)存的key-value存儲(chǔ),用來存儲(chǔ)小塊的任意數(shù)據(jù)(字符串、對象)。這些數(shù)據(jù)可以是數(shù)據(jù)庫調(diào)用、API調(diào)用或者是頁面渲染的結(jié)果。

Memcached簡潔而強(qiáng)大。它的簡潔設(shè)計(jì)便于快速開發(fā),減輕開發(fā)難度,解決了大數(shù)據(jù)量緩存的很多問題。它的API兼容大部分流行的開發(fā)語言。

本質(zhì)上,它是一個(gè)簡潔的key-value存儲(chǔ)系統(tǒng)。

一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動(dòng)態(tài)Web應(yīng)用的速度、提高可擴(kuò)展性。

Memcached 官網(wǎng):http://memcached.org/

特征

memcached作為高速運(yùn)行的分布式緩存服務(wù)器,具有以下的特點(diǎn)。

協(xié)議簡單

基于libevent的事件處理

內(nèi)置內(nèi)存存儲(chǔ)方式

memcached不互相通信的分布式

支持的語言

許多語言都實(shí)現(xiàn)了連接memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網(wǎng)站上列出的有:

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系統(tǒng)安裝memcached,首先要先安裝libevent庫。

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

安裝 Memcached

自動(dòng)安裝

Ubuntu/Debian

sudo apt-get install memcached

Redhat/Fedora/Centos

yum install memcached

FreeBSD

portmaster databases/memcached

源代碼安裝

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

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

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

cd memcached-1.x.x ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?進(jìn)入目錄

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

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

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

Memcached 運(yùn)行

Memcached命令的運(yùn)行:

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

注意:如果使用自動(dòng)安裝 memcached 命令位于?/usr/local/bin/memcached。

啟動(dòng)選項(xiàng):

-d是啟動(dòng)一個(gè)守護(hù)進(jìn)程;

-m是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB;

-u是運(yùn)行Memcache的用戶;

-l是監(jiān)聽的服務(wù)器IP地址,可以有多個(gè)地址;

-p是設(shè)置Memcache監(jiān)聽的端口,,最好是1024以上的端口;

-c是最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024;

-P是設(shè)置保存Memcache的pid文件。

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

從終端輸入以下命令,啟動(dòng)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)

這里顯示了調(diào)試信息。這樣就在前臺啟動(dòng)了memcached,監(jiān)聽TCP端口11211,最大內(nèi)存使用量為64M。調(diào)試信息的內(nèi)容大部分是關(guān)于存儲(chǔ)的信息。

(2)作為后臺服務(wù)程序運(yùn)行:

# /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

官網(wǎng)上并未提供 Memcached 的Window平臺安裝包,我們可以使用以下鏈接來下載,你需要根據(jù)自己的系統(tǒng)平臺及需要的版本號點(diǎn)擊對應(yīng)的鏈接下載即可:

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

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

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

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

32位系統(tǒng) 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-x86.zip

64位系統(tǒng) 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-amd64.zip

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

memcached <1.4.5 版本安裝

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

2、在 1.4.5 版本以前 memcached 可以作為一個(gè)服務(wù)安裝,使用管理員權(quán)限運(yùn)行以下命令:

c:\memcached\memcached.exe -d install

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

3、然后我們可以使用以下命令來啟動(dòng)和關(guān)閉 memcached 服務(wù):

c:\memcached\memcached.exe -d start

c:\memcached\memcached.exe -d stop

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

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

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

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

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

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

c:\memcached\memcached.exe -d uninstall

memcached >= 1.4.5 版本安裝

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

2、在 memcached1.4.5 版本之后,memcached 不能作為服務(wù)來運(yùn)行,需要使用任務(wù)計(jì)劃中來開啟一個(gè)普通的進(jìn)程,在 window 啟動(dòng)時(shí)設(shè)置 memcached自動(dòng)執(zhí)行。

我們使用管理員身份執(zhí)行以下命令將 memcached 添加來任務(wù)計(jì)劃表中:

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

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

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

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

3、如果需要?jiǎng)h除 memcached 的任務(wù)計(jì)劃可以執(zhí)行以下命令:

schtasks /delete /tn memcached

Memcached 連接

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

語法

telnet HOST PORT

命令中的 HOST 和 PORT 為運(yùn)行 Memcached 服務(wù)的 IP 和 端口。

實(shí)例

以下實(shí)例演示了如何連接到 Memcached 服務(wù)并執(zhí)行簡單的 set 和 get 命令。

本實(shí)例的 Memcached 服務(wù)運(yùn)行的主機(jī)為 127.0.0.1(本機(jī)) 、端口為 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 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)

STORED ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?結(jié)果

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

VALUE foo 0 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)

bar ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)

END ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 結(jié)束行

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

Memcached set 命令

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

如果set的key已經(jīng)存在,該命令可以更新該key所對應(yīng)的原來的數(shù)據(jù),也就是實(shí)現(xiàn)更新的作用。

語法:

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

set key flags exptime bytes [noreply]?

value?

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對的額外信息 。

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

bytes:在緩存中存儲(chǔ)的字節(jié)數(shù)

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

value:存儲(chǔ)的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實(shí)例

以下實(shí)例中我們設(shè)置:

key → runoob

flag → 0

exptime → 900 (以秒為單位)

bytes → 9 (數(shù)據(jù)存儲(chǔ)的字節(jié)數(shù))

value → memcached

set runoob 0 900 9

memcached

STORED


get runoob

VALUE runoob 0 9

memcached


END

輸出

如果數(shù)據(jù)設(shè)置成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

ERROR:在保存失敗后輸出。

Memcached add 命令

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

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

語法:

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

add key flags exptime bytes [noreply]

value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對的額外信息 。

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

bytes:在緩存中存儲(chǔ)的字節(jié)數(shù)

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

value:存儲(chǔ)的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實(shí)例

以下實(shí)例中我們設(shè)置:

key → new_key

flag → 0

exptime → 900 (以秒為單位)

bytes → 10 (數(shù)據(jù)存儲(chǔ)的字節(jié)數(shù))

value → data_value

add new_key 0 900 10

data_value

STORED

get new_key

VALUE new_key 0 10

data_value

END

輸出

如果數(shù)據(jù)添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED :在保存失敗后輸出。

Memcached replace 命令

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

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

語法:

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

replace key flags exptime bytes [noreply]

value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對的額外信息 。

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

bytes:在緩存中存儲(chǔ)的字節(jié)數(shù)

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

value:存儲(chǔ)的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實(shí)例

以下實(shí)例中我們設(shè)置:

key → mykey

flag → 0

exptime → 900 (以秒為單位)

bytes → 10 (數(shù)據(jù)存儲(chǔ)的字節(jié)數(shù))

value → data_value

以下實(shí)例中我們使用的鍵位 'mykey' 并存儲(chǔ)對應(yīng)的值 data_value。執(zhí)行后我們替換相同的 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

輸出

如果數(shù)據(jù)添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED:執(zhí)行替換失敗后輸出。

Memcached append 命令

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

語法:

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

append key flags exptime bytes [noreply]value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對的額外信息 。

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

bytes:在緩存中存儲(chǔ)的字節(jié)數(shù)

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

value:存儲(chǔ)的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實(shí)例

實(shí)例如下:

首先我們在 Memcached 中存儲(chǔ)一個(gè)鍵 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

輸出

如果數(shù)據(jù)添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED:該鍵在 Memcached 上不存在。

CLIENT_ERROR:執(zhí)行錯(cuò)誤。

Memcached prepend 命令

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

語法:

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

prepend key flags exptime bytes [noreply]

value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對的額外信息 。

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

bytes:在緩存中存儲(chǔ)的字節(jié)數(shù)

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

value:存儲(chǔ)的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實(shí)例

實(shí)例如下:

首先我們在 Memcached 中存儲(chǔ)一個(gè)鍵 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

輸出

如果數(shù)據(jù)添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

NOT_STORED:該鍵在 Memcached 上不存在。

CLIENT_ERROR:執(zhí)行錯(cuò)誤。

Memcached CAS 命令

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

它僅在當(dāng)前客戶端最后一次取值后,該key 對應(yīng)的值沒有被其他客戶端修改的情況下, 才能夠?qū)⒅祵懭搿?/p>

檢查是通過cas_token參數(shù)進(jìn)行的, 這個(gè)參數(shù)是Memcach指定給已經(jīng)存在的元素的一個(gè)唯一的64位值。

語法:

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

cas key flags exptime bytes unique_cas_token [noreply]

value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲(chǔ)關(guān)于鍵值對的額外信息 。

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

bytes:在緩存中存儲(chǔ)的字節(jié)數(shù)

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

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

value:存儲(chǔ)的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實(shí)例

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

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

實(shí)例步驟如下:

如果沒有設(shè)置唯一令牌,則 CAS 命令執(zhí)行錯(cuò)誤。

如果鍵 key 不存在,執(zhí)行失敗。

添加鍵值對。

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

使用 cas 命令更新數(shù)據(jù)

使用 get 命令查看數(shù)據(jù)是否更新

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

輸出

如果數(shù)據(jù)添加成功,則輸出:

STORED

輸出信息說明:

STORED:保存成功后輸出。

ERROR:保存出錯(cuò)或語法錯(cuò)誤。

EXISTS:在最后一次取值后另外一個(gè)用戶也在更新該數(shù)據(jù)。

NOT_FOUND:Memcached 服務(wù)上不存在該鍵值。

Memcached get 命令

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

語法:

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

get key

多個(gè) key 使用空格隔開,如下:

get key1 key2 key3

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

實(shí)例

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

set runoob 0 900 9

memcached

STORED

get runoob

VALUE runoob 0 9

memcached

END

Memcached gets 命令

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

語法:

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

gets key

多個(gè) key 使用空格隔開,如下:

gets key1 key2 key3

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

實(shí)例

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

set runoob 0 900 9

memcached

STORED

gets runoob

VALUE runoob 0 9 1

memcached

END

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

Memcached delete 命令

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

語法:

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

delete key [noreply]

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

noreply(可選): 該參數(shù)告知服務(wù)器不需要返回?cái)?shù)據(jù)

實(shí)例

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

set runoob 0 900 9memcached

STOREDget runoob

VALUE runoob 0 9memcachedENDdelete runoob

DELETEDget runoobENDdelete runoob

NOT_FOUND

輸出

輸出信息說明:

DELETED:刪除成功。

ERROR:語法錯(cuò)誤或刪除失敗。

NOT_FOUND:key 不存在。

Memcached incr 與 decr 命令

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

incr 與 decr 命令操作的數(shù)據(jù)必須是十進(jìn)制的32位無符號整數(shù)。

如果 key 不存在返回?NOT_FOUND,如果鍵的值不為數(shù)字,則返回?CLIENT_ERROR,其他錯(cuò)誤返回?ERROR。

incr 命令

語法:

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

incr key increment_value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

increment_value: 增加的數(shù)值。

實(shí)例

在以下實(shí)例中,我們使用 visitors 作為 key,初始值為 10,之后進(jìn)行加 5 操作。

set visitors 0 900 210STOREDget visitors

VALUE visitors 0 210ENDincr visitors 515get visitors

VALUE visitors 0 215END

輸出

輸出信息說明:

NOT_FOUND:key 不存在。

CLIENT_ERROR:自增值不是對象。

ERROR其他錯(cuò)誤,如語法錯(cuò)誤等。

decr 命令

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

decr key decrement_value

參數(shù)說明如下:

key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。

decrement_value: 減少的數(shù)值。

實(shí)例

set visitors 0 900 210STOREDget visitors

VALUE visitors 0 210ENDdecr visitors 55get visitors

VALUE visitors 0 15END

在以下實(shí)例中,我們使用 visitors 作為 key,初始值為 10,之后進(jìn)行減 5 操作。

輸出

輸出信息說明:

NOT_FOUND:key 不存在。

CLIENT_ERROR:自增值不是對象。

ERROR其他錯(cuò)誤,如語法錯(cuò)誤等。

Memcached stats 命令

Memcached stats 命令用于返回統(tǒng)計(jì)信息例如 PID(進(jìn)程號)、版本號、連接數(shù)等。

語法:

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

stats

實(shí)例

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

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

這里顯示了很多狀態(tài)信息,下邊詳細(xì)解釋每個(gè)狀態(tài)項(xiàng):

pid:memcache服務(wù)器進(jìn)程ID

uptime:服務(wù)器已運(yùn)行秒數(shù)

time:服務(wù)器當(dāng)前Unix時(shí)間戳

version:memcache版本

pointer_size:操作系統(tǒng)指針大小

rusage_user:進(jìn)程累計(jì)用戶時(shí)間

rusage_system:進(jìn)程累計(jì)系統(tǒng)時(shí)間

curr_connections:當(dāng)前連接數(shù)量

total_connections:Memcached運(yùn)行以來連接總數(shù)

connection_structures:Memcached分配的連接結(jié)構(gòu)數(shù)量

cmd_get:get命令請求次數(shù)

cmd_set:set命令請求次數(shù)

cmd_flush:flush命令請求次數(shù)

get_hits:get命令命中次數(shù)

get_misses:get命令未命中次數(shù)

delete_misses:delete命令未命中次數(shù)

delete_hits:delete命令命中次數(shù)

incr_misses:incr命令未命中次數(shù)

incr_hits:incr命令命中次數(shù)

decr_misses:decr命令未命中次數(shù)

decr_hits:decr命令命中次數(shù)

cas_misses:cas命令未命中次數(shù)

cas_hits:cas命令命中次數(shù)

cas_badval:使用擦拭次數(shù)

auth_cmds:認(rèn)證命令處理的次數(shù)

auth_errors:認(rèn)證失敗數(shù)目

bytes_read:讀取總字節(jié)數(shù)

bytes_written:發(fā)送總字節(jié)數(shù)

limit_maxbytes:分配的內(nèi)存總大小(字節(jié))

accepting_conns:服務(wù)器是否達(dá)到過最大連接(0/1)

listen_disabled_num:失效的監(jiān)聽數(shù)

threads:當(dāng)前線程數(shù)

conn_yields:連接操作主動(dòng)放棄數(shù)目

bytes:當(dāng)前存儲(chǔ)占用的字節(jié)數(shù)

curr_items:當(dāng)前存儲(chǔ)的數(shù)據(jù)總數(shù)

total_items:啟動(dòng)以來存儲(chǔ)的數(shù)據(jù)總數(shù)

evictions:LRU釋放的對象數(shù)目

reclaimed:已過期的數(shù)據(jù)條目來存儲(chǔ)新數(shù)據(jù)的數(shù)目

Memcached stats items 命令

Memcached stats items 命令用于顯示各個(gè) slab 中 item 的數(shù)目和存儲(chǔ)時(shí)長(最后一次訪問距離現(xiàn)在的秒數(shù))。

語法:

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

stats items

實(shí)例

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 命令用于顯示各個(gè)slab的信息,包括chunk的大小、數(shù)目、使用情況等。

語法:

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

stats slabs

實(shí)例

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的大小和個(gè)數(shù)。

該信息返回兩列,第一列是 item 的大小,第二列是 item 的個(gè)數(shù)。

語法:

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

stats sizes

實(shí)例

stats sizes

STAT 96 1

END

Memcached flush_all 命令

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

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

語法:

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

flush_all [time] [noreply]

實(shí)例

清理緩存:

set runoob 0 900 9memcached

STOREDget runoob

VALUE runoob 0 9memcachedENDflush_all

OKget runoobEND

使用Python操作memcache

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

優(yōu)點(diǎn)

完全實(shí)現(xiàn)了memcached text協(xié)議

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

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

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

可以將網(wǎng)絡(luò)異常,memecached錯(cuò)誤當(dāng)成是緩存丟失

安裝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') ?

最佳實(shí)踐

在構(gòu)造Client時(shí),添加timeout 的配置,防止block操作

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

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

使用“ignore_exc” 屬性,將網(wǎng)絡(luò)異常,memecached錯(cuò)誤當(dāng)成是緩存丟失

主要URL:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容