Memcached常用入門(mén)

1.概述

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

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

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

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

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

2.特征

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

協(xié)議簡(jiǎn)單

基于libevent的事件處理

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

memcached不互相通信的分布式

3.Linux Memcached安裝

Linux系統(tǒng)安裝memcached,首先要先安裝libevent庫(kù):

yum install libevent libevent-devel

安裝 Memcached:

yum install memcached

運(yùn)行 Memcached:(bin -> usr/bin)

/usr/bin/memcached -h

/bin/memcached -h

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

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

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

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

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

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

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

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

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

/bin/memcached -p 11211 -m 64m -vv -u root

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

/bin/memcached -p 11211 -m 64m -u root -d

/bin/memcached? -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

4.Memcached set命令

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

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

語(yǔ)法:

set key flags exptime bytes [noreply]

value

參數(shù)說(shuō)明如下:

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

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

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

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

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

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

例如:

set foo 0 900 9

memcached

get foo

5.Memcached add 命令

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

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

語(yǔ)法:

add key flags exptime bytes [noreply]

value

例如:

add new_key 0 900 10

data_value

6.Memcached replace 命令

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

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

語(yǔ)法:

replace key flags exptime bytes [noreply]

value

例如:

add mykey 0 900 10

data_value

get mykey

replace mykey 0 900 16

some_other_value

7.Memcached append 命令

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

語(yǔ)法:

append key flags exptime bytes [noreply]

value

8.Memcached prepend 命令

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

用法:

prepend key flags exptime bytes [noreply]

value

例如:

set foo 0 900 9

memcached

STORED

get foo

VALUE foo 0 9

memcached

END

prepend foo 0 900 5

redis

STORED

get foo

VALUE foo 0 14

redismemcached

END

9.Memcached get 命令

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

語(yǔ)法:

get key

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

get key1 key2 key3

10.Memcached delete 命令

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

語(yǔ)法:

delete key [noreply]

11.Memcached incr 與 decr 命令

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

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

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

incr 命令語(yǔ)法:

incr key increment_value

例如:

set no 0 900 2

10

incr no 5

decr 命令語(yǔ)法:

decr key decrement_value

例如:

decr no?5

5

12.Memcached stats 命令

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

stats

STAT pid 81160? //memcache服務(wù)器進(jìn)程ID

STAT uptime 18639? //服務(wù)器已運(yùn)行秒數(shù)

STAT time 1565081958? //服務(wù)器當(dāng)前Unix時(shí)間戳

STAT version 1.4.15? //memcache版本

STAT libevent 2.0.21-stable //libevent版本

STAT pointer_size 64? //操作系統(tǒng)指針大小

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

STAT rusage_system 0.243970? //進(jìn)程累計(jì)系統(tǒng)時(shí)間

STAT curr_connections 5? //當(dāng)前連接數(shù)量

STAT total_connections 10? //Memcached運(yùn)行以來(lái)連接總數(shù)

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

STAT reserved_fds 20? //內(nèi)部使用的FD數(shù)

STAT cmd_get 42? //get命令請(qǐng)求次數(shù)

STAT cmd_set 24? //set命令請(qǐng)求次數(shù)

STAT cmd_flush 0 //flush命令請(qǐng)求次數(shù)

STAT cmd_touch 0 //touch命令請(qǐng)求總數(shù)

STAT get_hits 33 //get命令命中次數(shù)

STAT get_misses 9//get命令未命中次數(shù)

STAT delete_misses 1 //delete命令未命中次數(shù)

STAT delete_hits 2? //delete命令命中次數(shù)

STAT incr_misses 0? //incr命令未命中次數(shù)

STAT incr_hits 1? ? //incr命令命中次數(shù)

STAT decr_misses 0? //decr命令未命中次數(shù)

STAT decr_hits 3? ? //decr命令命中次數(shù)

STAT cas_misses 0? ? //cas命令未命中次數(shù)

STAT cas_hits 0? ? ? //cas命令命中次數(shù)

STAT cas_badval 1? ? //使用擦拭次數(shù)

STAT touch_hits 0? ? //touch命中次數(shù)

STAT touch_misses 0? //touch未命中次數(shù)

STAT auth_cmds 0? ? //認(rèn)證命令處理的次數(shù)

STAT auth_errors 0? //認(rèn)證失敗數(shù)目

STAT bytes_read 1554 //讀取總字節(jié)數(shù)

STAT bytes_written 3902? //發(fā)送總字節(jié)數(shù)

STAT limit_maxbytes 1073741824? //分配的內(nèi)存總大小(字節(jié))

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

STAT listen_disabled_num 0? //失效的監(jiān)聽(tīng)數(shù)

STAT threads 4 //當(dāng)前線程數(shù)

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

STAT hash_power_level 16? //hash表等級(jí)

STAT hash_bytes 524288? ? //當(dāng)前hash表大小

STAT hash_is_expanding 0? //hash表正在擴(kuò)展

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

STAT curr_items 1? //當(dāng)前存儲(chǔ)的數(shù)據(jù)總數(shù)

STAT total_items 21 //啟動(dòng)以來(lái)存儲(chǔ)的數(shù)據(jù)總數(shù)

STAT expired_unfetched 0? //已過(guò)期但未獲取大對(duì)象數(shù)目

STAT evicted_unfetched 0? //已驅(qū)逐但未獲取大對(duì)象數(shù)目

STAT evictions 0? ? //LRU釋放的對(duì)象數(shù)目

STAT reclaimed 4? ? //已過(guò)期的數(shù)據(jù)條目來(lái)存儲(chǔ)新數(shù)據(jù)的數(shù)目

END

13.Memcached stats items 命令

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

stats items

STAT items:1:number 1? //該slab中對(duì)象數(shù)(不包含過(guò)期對(duì)象)

STAT items:1:age 884? //LRU隊(duì)列中最老對(duì)象的過(guò)期時(shí)間

STAT items:1:evicted 0 //LRU釋放對(duì)象數(shù)

STAT items:1:evicted_nonzero 0? //設(shè)置了非0時(shí)間的LRU釋放對(duì)象數(shù)

STAT items:1:evicted_time 0 //最后一次LRU釋放的對(duì)象存在時(shí)間

STAT items:1:outofmemory 0 //不能存儲(chǔ)對(duì)象次數(shù)

STAT items:1:tailrepairs 0 //修復(fù)slabs次數(shù)

STAT items:1:reclaimed 4 //使用過(guò)期對(duì)象空間存儲(chǔ)對(duì)象次數(shù)

STAT items:1:expired_unfetched 0//已過(guò)期但未獲取的對(duì)象數(shù)目

STAT items:1:evicted_unfetched 0//已驅(qū)逐但未獲取的對(duì)象數(shù)目

END

14. 參考

《Memcached 教程 | 菜鳥(niǎo)教程》

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

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

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