真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

memcache配置

建站服務(wù)器

1、memecached介紹

成都創(chuàng)新互聯(lián)長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為未央企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,未央網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

是一個(gè)開(kāi)源的,高性能的內(nèi)存緩存軟件,通過(guò)在事先規(guī)劃好的內(nèi)存空間中臨時(shí)緩存數(shù)據(jù)庫(kù)中的各類數(shù)據(jù),以達(dá)到減少業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)的直接高并發(fā)訪問(wèn),從而達(dá)到提升數(shù)據(jù)庫(kù)的訪問(wèn)性能,加速動(dòng)態(tài)服務(wù)的能力。

memcache是基于libevent的事件處理,利用這個(gè)庫(kù)進(jìn)行異步事件處理。

2、memecached在企業(yè)中的應(yīng)用

1)作為數(shù)據(jù)庫(kù)的前端緩存應(yīng)用,完整緩存,熱點(diǎn)緩存

2)作為集群的session會(huì)話共享存儲(chǔ)

3、memecached服務(wù)在企業(yè)業(yè)務(wù)中的工作流程

1)當(dāng)web程序訪問(wèn)后端數(shù)據(jù)庫(kù)時(shí)會(huì)優(yōu)先訪問(wèn)memcached內(nèi)存緩存,如果緩存命中數(shù)據(jù)就直接獲取數(shù)據(jù)返回給前端用戶,如果沒(méi)有命中數(shù)據(jù),再由程序請(qǐng)求后端數(shù)據(jù)庫(kù)服務(wù)器,獲取對(duì)應(yīng)數(shù)據(jù)后,返回給前端用戶并將數(shù)據(jù)存放到memcached內(nèi)存中進(jìn)行緩存,等待下次請(qǐng)求訪問(wèn)。

2)當(dāng)程序更新,修改或刪除數(shù)據(jù)庫(kù)中已有的數(shù)據(jù)時(shí),會(huì)同時(shí)發(fā)送請(qǐng)求通知memcached已經(jīng)緩存過(guò)的同一個(gè)ID內(nèi)存失效,從而保證memcache中的數(shù)據(jù)和數(shù)據(jù)庫(kù)中的數(shù)據(jù)一致。

3)數(shù)據(jù)庫(kù)插件可以在寫入更新數(shù)據(jù)庫(kù)后,自動(dòng)將更新數(shù)據(jù)推送給memcached緩存起來(lái)。

4、memcached服務(wù)分布式集群的實(shí)現(xiàn)

memcached集群中,每個(gè)memcache服務(wù)器互不通信,都是個(gè)體的,每個(gè)服務(wù)器只管理自己服務(wù)器的數(shù)據(jù),所有memcached服務(wù)器的緩存的數(shù)據(jù)總和才是數(shù)據(jù)庫(kù)中的整個(gè)數(shù)據(jù)。

1)程序端實(shí)現(xiàn):程序加載所有memcached的ip列表,通過(guò)對(duì)key做hash(一致性哈希)

2)負(fù)載均衡器:(LVS keplaved)

一致性哈希:保證每個(gè)對(duì)象只請(qǐng)求一個(gè)對(duì)應(yīng)的服務(wù)器,而且當(dāng)節(jié)點(diǎn)宕機(jī)后保證數(shù)據(jù)更新的最小化。

5、memcached服務(wù)特點(diǎn)及工作原理

1)完全基于內(nèi)存的

2)節(jié)點(diǎn)之間相互獨(dú)立

3)基于異步I/O模型,使用libevent作為事件通知機(jī)制

4)緩存數(shù)據(jù)以key/value對(duì)形式存在的

5)c/s模式架構(gòu),c語(yǔ)言編寫,總代碼為2000多行

6)全部數(shù)據(jù)存儲(chǔ)在內(nèi)存中,無(wú)持久性存儲(chǔ)設(shè)計(jì),重啟服務(wù)數(shù)據(jù)會(huì)丟失。

7)可以對(duì)存儲(chǔ)數(shù)據(jù)設(shè)置過(guò)期時(shí)間,服務(wù)本身不會(huì)監(jiān)控過(guò)期,而是訪問(wèn)的時(shí)候查看key的時(shí)間戳判斷是否過(guò)期。

8)memcached內(nèi)存分配機(jī)制是對(duì)特定的內(nèi)存進(jìn)行分塊,再把多個(gè)分塊進(jìn)行分組

6、memcached內(nèi)存管理機(jī)制

malloc的全稱是memory allocaion,中文叫動(dòng)態(tài)內(nèi)存分配,當(dāng)無(wú)法知道內(nèi)存具體位置時(shí),想要綁定內(nèi)存空間,就需要用到動(dòng)態(tài)的分配內(nèi)存。

早期的memcached內(nèi)存管理方式是通過(guò)malloc分配的內(nèi)存,使用完后回收內(nèi)存會(huì)產(chǎn)生碎片,會(huì)降低操作系統(tǒng)對(duì)內(nèi)存的管理,加重操作系統(tǒng)內(nèi)存管理器的負(fù)擔(dān),會(huì)導(dǎo)致操作系統(tǒng)比memcached進(jìn)程本地還慢,為了解決上述問(wèn)題,slab allocator內(nèi)存分配機(jī)制就誕生了。

Slab Allocation機(jī)制原理是按照預(yù)先規(guī)定的大小,將分配給memcached的內(nèi)存分割成特定長(zhǎng)度的內(nèi)存塊,再把尺寸相同的內(nèi)存塊分成組,這些內(nèi)存塊不會(huì)釋放,可以重復(fù)利用。

memcached服務(wù)器中保存著slab內(nèi)空閑chunk的列表,根據(jù)該列表選擇chunk,然后將數(shù)據(jù)存儲(chǔ)在其中,當(dāng)有數(shù)據(jù)存入時(shí),memcached會(huì)根據(jù)數(shù)據(jù)的大小,選擇最合適的數(shù)據(jù)大小的slab分配一個(gè)能存儲(chǔ)下這個(gè)數(shù)據(jù)的最小內(nèi)存塊(chunk).例如:有100字節(jié)的數(shù)據(jù)就會(huì)分配存入112字節(jié)的一個(gè)內(nèi)存塊中,這樣就會(huì)浪費(fèi)掉12字節(jié)的內(nèi)存空間,這是slab allocation機(jī)制的一個(gè)缺點(diǎn)。

1)slab allocation的主要術(shù)語(yǔ):

page:分配給slab的內(nèi)存空間,默認(rèn)是1MB,分配給slab之后根據(jù)slab的大小切分成chunk

chunk:用于緩存數(shù)據(jù)的內(nèi)存空間或內(nèi)存塊

slab class:特定大小的多個(gè)chunk的集合或組

2)memcached slab allocation內(nèi)存管理機(jī)制優(yōu)化:

在啟動(dòng)時(shí)指定-f參數(shù),能控制內(nèi)存組之間的大小差異,在應(yīng)用中使用memcached時(shí),通常不重新設(shè)置這個(gè)參數(shù),默認(rèn)值為1.25進(jìn)行部署,如果想優(yōu)化memcached對(duì)內(nèi)存的使用,可以考慮重新計(jì)算數(shù)據(jù)的預(yù)期平均長(zhǎng)度,調(diào)整這個(gè)參數(shù)來(lái)獲取合適的設(shè)置值。

-f chunk size growth factor(default:1.25)

例如:

使用2時(shí),chunk的大小會(huì)以2的倍數(shù)增加:

memcached-m512m-d-uroot-c8192-f2-vv
[root@zxqtmp]#slabclass1:chunksize96perslab10922
slabclass2:chunksize192perslab5461
slabclass3:chunksize384perslab2730
slabclass4:chunksize768perslab1365
slabclass5:chunksize1536perslab682
slabclass6:chunksize3072perslab341
slabclass7:chunksize6144perslab170
slabclass8:chunksize12288perslab85
slabclass9:chunksize24576perslab42
slabclass10:chunksize49152perslab21
slabclass11:chunksize98304perslab10
slabclass12:chunksize196608perslab5
slabclass13:chunksize393216perslab2
slabclass14:chunksize1048576perslab1
<26serverlistening(auto-negotiate)
<27serverlistening(auto-negotiate)
<28sendbufferwas124928,now268435456
<29sendbufferwas124928,now268435456
<28serverlistening(udp)
<29serverlistening(udp)
<28serverlistening(udp)
<29serverlistening(udp)
<28serverlistening(udp)
<29serverlistening(udp)
<28serverlistening(udp)
<29serverlistening(udp)

使用1.25時(shí),chunk間隔會(huì)很小,存儲(chǔ)小文件時(shí)內(nèi)存浪費(fèi)會(huì)減少很多:

[root@zxqtmp]#memcached-m512m-d-uroot-c8192-f1.25-vv
[root@zxqtmp]#slabclass1:chunksize96perslab10922
slabclass2:chunksize120perslab8738
slabclass3:chunksize152perslab6898
slabclass4:chunksize192perslab5461
slabclass5:chunksize240perslab4369
slabclass6:chunksize304perslab3449
slabclass7:chunksize384perslab2730
slabclass8:chunksize480perslab2184
slabclass9:chunksize600perslab1747
slabclass10:chunksize752perslab1394
slabclass11:chunksize944perslab1110
slabclass12:chunksize1184perslab885
slabclass13:chunksize1480perslab708
slabclass14:chunksize1856perslab564
slabclass15:chunksize2320perslab451
slabclass16:chunksize2904perslab361
slabclass17:chunksize3632perslab288
slabclass18:chunksize4544perslab230
slabclass19:chunksize5680perslab184
slabclass20:chunksize7104perslab147
slabclass21:chunksize8880perslab118
slabclass22:chunksize11104perslab94
slabclass23:chunksize13880perslab75
slabclass24:chunksize17352perslab60
slabclass25:chunksize21696perslab48
slabclass26:chunksize27120perslab38
slabclass27:chunksize33904perslab30
slabclass28:chunksize42384perslab24
slabclass29:chunksize52984perslab19
slabclass30:chunksize66232perslab15
slabclass31:chunksize82792perslab12
slabclass32:chunksize103496perslab10
slabclass33:chunksize129376perslab8
slabclass34:chunksize161720perslab6
slabclass35:chunksize202152perslab5
slabclass36:chunksize252696perslab4
slabclass37:chunksize315872perslab3
slabclass38:chunksize394840perslab2
slabclass39:chunksize493552perslab2
slabclass40:chunksize616944perslab1
slabclass41:chunksize771184perslab1
slabclass42:chunksize1048576perslab1
failedtolistenonTCPport11211:Addressalreadyinuse

7、memcached對(duì)象刪除原來(lái)與cache機(jī)制

memecached主要的cache機(jī)制是LRU最近最少用的算法,加上item過(guò)期失效,當(dāng)存儲(chǔ)數(shù)據(jù)到memcached中,可指定該數(shù)據(jù)在緩存中可以呆多久,如果memcached的內(nèi)存不夠用了,過(guò)期的slabs會(huì)優(yōu)先被替換,接著就會(huì)輪到最老的未被使用的slabs。在某些情況下(完整緩存),如果不想使用LRU算法,可以通過(guò)-M參數(shù)來(lái)啟動(dòng)memcached,這樣,memcahced在內(nèi)存耗盡時(shí),會(huì)返回一個(gè)報(bào)錯(cuò)信息。

-M return error on memeory exhausted(rather than removing items)

8、memcached服務(wù)端的安裝

1)服務(wù)端的安裝

memcached下載地址:http://www.danga.com/memcached/

memcached其他下載地址:http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

libevent下載地址:http://monkey.org/~provos/libevent/

網(wǎng)友安裝參考:http://instance.iteye.com/blog/1691705

由于memcache是基于libevent事件庫(kù)文件的,所以要先安裝libevetn:

wgethttps://github.com/downloads/libevent/libevent/libevent-1.4.13-stable.tar.gz
tarzxflibevent-1.4.13-stable.tar.gz
cdlibevent-1.4.13-stable
./configure
make
makeinstall
cd..

安裝memcached:

wgethttp://memcached.org/files/old/memcached-1.4.13.tar.gz
tarzxfmemcached-1.4.13.tar.gz
cdmemcached-1.4.13
./configure
make
makeinstall
cd..

啟動(dòng)報(bào)錯(cuò)處理:

[root@zxqtools]#memcached-m1m-p11212-d-c8192
memcached:errorwhileloadingsharedlibraries:libevent-1.4.so.2:cannotopensharedobjectfile:Nosuchfileordirectory
解決方法:就是讓系統(tǒng)能加載到libevent庫(kù)文件。
echo/usr/local/lib>>/etc/ld.so.conf
ldconfig

2)啟動(dòng)memcached服務(wù):

[root@zxqmemcached-1.4.13]#whichmemcached
/usr/local/bin/memcached
memcached-m16m-p11212-d-uroot-c8192
lsof-i:11212
COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME
memcached46673root26uIPv42444550t0TCP*:11212(LISTEN)
memcached46673root27uIPv62444560t0TCP*:11212(LISTEN)
memcached46673root28uIPv42444590t0UDP*:11212
memcached46673root29uIPv62444600t0UDP*:11212
netstat-lntup|grepmemcached
tcp000.0.0.0:112120.0.0.0:*LISTEN46673/memcached
tcp00:::11212:::*LISTEN46673/memcached
udp000.0.0.0:112120.0.0.0:*46673/memcached
udp00:::11212:::*46673/memcached
ps-ef|grepmemcached
root466731017:15?00:00:00memcached-m16m-p11212-d-uroot-c8192

3)memcached相關(guān)啟動(dòng)參數(shù)說(shuō)明:

-p 指定memcached服務(wù)監(jiān)聽(tīng)TCP端口號(hào),默認(rèn)為11211

-m 指定memcached服務(wù)可以緩存數(shù)據(jù)的內(nèi)存,默認(rèn)為64MB

-u 運(yùn)行memcached的用戶

-d 作為守護(hù)進(jìn)程在后臺(tái)運(yùn)行

-c 的并發(fā)連接數(shù),默認(rèn)是1024,安裝服務(wù)器的并發(fā)訪問(wèn)量來(lái)設(shè)置

-vv 以very vrebose模式啟動(dòng),調(diào)試信息和錯(cuò)誤輸出到控制臺(tái)

-P 設(shè)置保存memcached的PID文件

-l 指定監(jiān)聽(tīng)的服務(wù)器ip地址

-f 調(diào)優(yōu)因子

-M 不使用LRU算法刪除緩存,當(dāng)內(nèi)存不夠用時(shí)會(huì)報(bào)錯(cuò)

其他選擇,通過(guò)memcached -h查看

memcached-m15m-d-uroot-p11213-M-c8192-P/var/run/memcached.pid-f1.25-l127.0.0.1

4)存儲(chǔ)和查看數(shù)據(jù)

語(yǔ)法: \\r\\n\\r\

set k01 0 0 10\\r\\n9999999999\\r\

set/add/replace

set 存儲(chǔ)此數(shù)據(jù),如果建存在,則之前的值將被替換

add 存儲(chǔ)此數(shù)據(jù),只在服務(wù)器未保留此鍵值對(duì)數(shù)據(jù)時(shí)

replace 存儲(chǔ)此數(shù)據(jù),只在服務(wù)器曾保留此鍵值的數(shù)據(jù)時(shí)

是接下來(lái)的客戶端所要求存儲(chǔ)的數(shù)據(jù)的鍵值

是在取回內(nèi)容時(shí),與數(shù)據(jù)和發(fā)送塊一同保存服務(wù)器上的任意16位無(wú)符號(hào)整型(十進(jìn)制)客戶端可以用來(lái)作為“位域”來(lái)存儲(chǔ)一些特定的信息,它對(duì)服務(wù)器是不透明的。

是終止時(shí)間,如果為0,該項(xiàng)永不過(guò)期,雖然它可能被刪除,以便為其他緩存項(xiàng)目騰出位置,如果為非0,到達(dá)終止時(shí)間后,客戶端再無(wú)法獲取到該項(xiàng)內(nèi)容。

是隨后的數(shù)據(jù)區(qū)塊的字節(jié)長(zhǎng)度,不包括用于分野的\\r\\n它可以是0,但后面會(huì)跟隨一個(gè)空的數(shù)據(jù)塊。

\\r\\n 是大段的8位數(shù)據(jù),其長(zhǎng)度由前面的命令行中的指定

使用printf打印數(shù)據(jù),使用nc連接到memcached

set設(shè)置key為k01,value為999999999,主要指定字符串大小要與后面的數(shù)據(jù)對(duì)應(yīng)上。

[root@zxqlib]#printfsetk010010\\r\\n9999999999\\r\\n|nc127.0.0.111212
STORED

get查看key k01的value:

[root@zxqlib]#printfgetk01\\r\\n|nc127.0.0.111212
VALUEk01010
9999999999
END

delete刪除key k01的鍵值對(duì)數(shù)據(jù):

[root@zxqlib]#printfdeletek01\\r\\n|nc127.0.0.111212
DELETED

add添加鍵值,緩存中不存在值時(shí),如果存在值會(huì)響應(yīng)NOT_STORED

[root@zxqbin]#printfsetkey01002\\r\\nab\\r\\n|nc127.0.0.111213
STORED
[root@zxqbin]#printfaddkey01002\\r\\nab\\r\\n|nc127.0.0.111213
NOT_STORED

replace當(dāng)鍵值存在時(shí),replace命令才會(huì)替換緩存中的鍵,如果緩存中不存在鍵,會(huì)報(bào)NOT_STORED錯(cuò)誤響應(yīng):

[root@zxqbin]#printfreplacekey01002\\r\\n88\\r\\n|nc127.0.0.111213
STORED
[root@zxqbin]#printfreplacekey02002\\r\\n99\\r\\n|nc127.0.0.111213
NOT_STORED

gets與get類似,只是會(huì)返回一個(gè)鍵值對(duì)的標(biāo)識(shí)值

[root@zxqbin]#printfsetkey03005\\r\\n55555\\r\\n|nc127.0.0.111213
STORED
[root@zxqbin]#printfgetskey03\\r\\n|nc127.0.0.111213
VALUEkey03055
55555
END
[root@zxqbin]#printfgetkey03\\r\\n|nc127.0.0.111213
VALUEkey0305
55555
END

cas用于設(shè)置鍵值對(duì),與set相似的語(yǔ)法,但會(huì)使用gets執(zhí)行后的額外標(biāo)識(shí)值,來(lái)更改上次讀取的鍵值對(duì),如果標(biāo)識(shí)值不對(duì)將報(bào)錯(cuò):

[root@zxqbin]#printfgetskey03\\r\\n|nc127.0.0.111213
VALUEkey03057
88888
END
[root@zxqbin]#printfcaskey030058\\r\\n99999\\r\\n|nc127.0.0.111213
EXISTS
[root@zxqbin]#printfcaskey030057\\r\\n99999\\r\\n|nc127.0.0.111213
STORED
[root@zxqbin]#printfgetskey03\\r\\n|nc127.0.0.111213
VALUEkey03058
99999
END

5)stats查看memcached當(dāng)前實(shí)例信息:

[root@zxqtmp]#printfstats\\r\\n|nc127.0.0.111212
STATpid46673進(jìn)程ID
STATuptime25336服務(wù)器運(yùn)行秒數(shù)
STATtime1494173893服務(wù)器當(dāng)前unix時(shí)間戳
STATversion1.4.13memcached版本
STATlibevent1.4.13-stablelibevent版本
STATpointer_size64操作系統(tǒng)位數(shù),64位
STATrusage_user0.642902進(jìn)程累計(jì)用戶時(shí)間
STATrusage_system0.303953進(jìn)程累計(jì)系統(tǒng)時(shí)間
STATcurr_connections10當(dāng)前打開(kāi)連接數(shù)
STATtotal_connections25memecached運(yùn)行以來(lái)連接總數(shù)
STATconnection_structures11memcached分配的連接結(jié)構(gòu)數(shù)
STATreserved_fds20內(nèi)部使用的FD數(shù)
STATcmd_get7執(zhí)行g(shù)et命令總數(shù)
STATcmd_set3執(zhí)行set命令總數(shù)
STATcmd_flush0執(zhí)行flush_all命令總數(shù)
STATcmd_touch0touch命令請(qǐng)求總數(shù)
STATget_hits3get命中次數(shù)
STATget_misses4get未命中次數(shù)
STATdelete_misses0delete未命中次數(shù)
STATdelete_hits1delete命中次數(shù)
STATincr_misses0incr未命中次數(shù)
STATincr_hits0incr命中次數(shù)
STATdecr_misses0decr未命中次數(shù)
STATdecr_hits0decr命中次數(shù)
STATcas_misses0cas未命中次數(shù)
STATcas_hits0cas命中次數(shù)
STATcas_badval0使用擦拭次數(shù)
STATtouch_hits0touch命中次數(shù)
STATtouch_misses0touch未命中次數(shù)
STATauth_cmds0認(rèn)證命令處理次數(shù)
STATauth_errors0認(rèn)證失敗數(shù)目
STATbytes_read358讀取字節(jié)總數(shù)
STATbytes_written160寫入字節(jié)總數(shù)
STATlimit_maxbytes16777216分配的內(nèi)存總數(shù)(字節(jié))
STATaccepting_conns1目前接受的連接數(shù)
STATlisten_disabled_num0失效的監(jiān)聽(tīng)數(shù)
STATthreads4線程數(shù)
STATconn_yields0連接操作主動(dòng)放棄數(shù)目
STAThash_power_level16hash表等級(jí)
STAThash_bytes524288當(dāng)前hash表大小
STAThash_is_expanding0hash表正在擴(kuò)展
STATexpired_unfetched0已過(guò)期但未獲取大對(duì)象數(shù)目
STATevicted_unfetched0已驅(qū)逐但未獲取大對(duì)象數(shù)目
STATbytes166當(dāng)前存儲(chǔ)占用字節(jié)數(shù)
STATcurr_items2當(dāng)前存儲(chǔ)的數(shù)據(jù)總個(gè)數(shù)
STATtotal_items3啟動(dòng)以來(lái)存儲(chǔ)的數(shù)據(jù)總數(shù)
STATevictions0LRU釋放的對(duì)象數(shù)目
STATreclaimed0已過(guò)期的數(shù)據(jù)條目來(lái)存儲(chǔ)新數(shù)據(jù)的數(shù)目
END

stats items 查看items行內(nèi)容:

[root@zxqbin]#printfstatsitems\\r\\n|nc127.0.0.111213
STATitems:1:number4該slab中對(duì)象數(shù)(不包含過(guò)期對(duì)象)
STATitems:1:age1941LRU隊(duì)列中最老對(duì)象的過(guò)期時(shí)間
STATitems:1:evicted0LRU釋放對(duì)象數(shù)
STATitems:1:evicted_nonzero0設(shè)置了非0時(shí)間的LRU釋放對(duì)象數(shù)
STATitems:1:evicted_time0最后一次LRU釋放的對(duì)象存在時(shí)間
STATitems:1:outofmemory0不能存儲(chǔ)對(duì)象次數(shù)
STATitems:1:tailrepairs0修復(fù)slabs次數(shù)
STATitems:1:reclaimed0使用過(guò)期對(duì)象空間存儲(chǔ)對(duì)象次數(shù)
STATitems:1:expired_unfetched0已過(guò)期但未獲取的對(duì)象數(shù)目
STATitems:1:evicted_unfetched0已驅(qū)逐但未獲取的對(duì)象數(shù)目
END

stats cachedump slabs_id limit_num,slabs_id是由stats items返回的值,也就是項(xiàng)目組號(hào),limit_num返回的記錄數(shù),0為返回所有記錄,可以兩者結(jié)合遍歷memcache所有記錄數(shù)據(jù):

[root@zxqbin]#printfstatsitems\\r\\n|nc127.0.0.111213
STATitems:1:number5
STATitems:1:age2589
STATitems:1:evicted0
STATitems:1:evicted_nonzero0
STATitems:1:evicted_time0
STATitems:1:outofmemory0
STATitems:1:tailrepairs0
STATitems:1:reclaimed0
STATitems:1:expired_unfetched0
STATitems:1:evicted_unfetched0
STATitems:2:number1
STATitems:2:age3
STATitems:2:evicted0
STATitems:2:evicted_nonzero0
STATitems:2:evicted_time0
STATitems:2:outofmemory0
STATitems:2:tailrepairs0
STATitems:2:reclaimed0
STATitems:2:expired_unfetched0
STATitems:2:evicted_unfetched0
END
[root@zxqbin]#printfstatscachedump10\\r\\n|nc127.0.0.111213
ITEMkey04[15b;1494188606s]
ITEMkey03[5b;1494188606s]
ITEMkey01[2b;1494188606s]
ITEMuserID[5b;1494188606s]
ITEMuserid[5b;1494188606s]
END
[root@zxqbin]#printfstatscachedump20\\r\\n|nc127.0.0.111213
ITEMkey05[35b;1494188606s]
END

stats slabs顯示各個(gè)slab的信息,包括chunk的大小,數(shù)目和使用情況等:

printfstatsslabs\\r\\n|nc127.0.0.111213
STAT1:chunk_size96chunk大?。╞yte)
STAT1:chunks_per_page10922每個(gè)page的chunk數(shù)量
STAT1:total_pages1page數(shù)量
STAT1:total_chunks10922chunk總數(shù)量(chunks_per_page*total_pages)
STAT1:used_chunks6已被分配的chunk數(shù)量
STAT1:free_chunks1過(guò)期數(shù)據(jù)空出的chunk數(shù)
STAT1:free_chunks_end10915從未被使用過(guò)的chunk數(shù)
STAT1:mem_requested481請(qǐng)求存儲(chǔ)的字節(jié)數(shù)
STAT1:get_hits6get命令命中數(shù)
STAT1:cmd_set17
STAT1:delete_hits0
STAT1:incr_hits0
STAT1:decr_hits0
STAT1:cas_hits3
STAT1:cas_badval1cas數(shù)據(jù)類型錯(cuò)誤數(shù)
STAT1:touch_hits0touch命令命中數(shù)
STAT2:chunk_size120
STAT2:chunks_per_page8738
STAT2:total_pages1
STAT2:total_chunks8738
STAT2:used_chunks2
STAT2:free_chunks0
STAT2:free_chunks_end8736
STAT2:mem_requested207
STAT2:get_hits0
STAT2:cmd_set3
STAT2:delete_hits0
STAT2:incr_hits0
STAT2:decr_hits0
STAT2:cas_hits0
STAT2:cas_badval0
STAT2:touch_hits0
STATactive_slabs2
STATtotal_malloced2097072
END

stats settings 可以查看一些memcached設(shè)置例如線程數(shù)

[root@zxqbin]#printfstatssettings\\r\\n|nc127.0.0.111213
STATmaxbytes15728640
STATmaxconns8192
STATtcpport11213
STATudpport11213
STATinter127.0.0.1
STATverbosity0
STAToldest3537
STATevictionsoff
STATdomain_socketNULL
STATumask700
STATgrowth_factor1.25
STATchunk_size48
STATnum_threads4
STATnum_threads_per_udp4
STATstat_key_prefix:
STATdetail_enabledno
STATreqs_per_event20
STATcas_enabledyes
STATtcp_backlog1024
STATbinding_protocolauto-negotiate
STATauth_enabled_saslno
STATitem_size_max1048576
STATmaxconns_fastno
STAThashpower_init0
STATslab_reassignno
STATslab_automoveno
END

stats sizes 查看存在的item大小和個(gè)數(shù)

[root@zxqbin]#printfstatssizes\\r\\n|nc127.0.0.111213
STAT966
STAT1282
END

stats reset 清理統(tǒng)計(jì)數(shù)據(jù)

printfstatsreset\\r\\n|nc127.0.0.111213

flush_all用于清理存儲(chǔ)中的所有鍵值對(duì):

[root@zxqbin]#printfflush_all\\r\\n|nc127.0.0.111213
OK

append 將數(shù)據(jù)追加到當(dāng)前緩存數(shù)據(jù)的之后,當(dāng)緩存數(shù)據(jù)存在時(shí)才存儲(chǔ)

[root@zxqbin]#printfgetkey07\\r\\n|nc127.0.0.111213
VALUEkey07025
aaaaabbbbbcccccdddddeeeee
END
[root@zxqbin]#printfappendkey07005\\r\\n_@@@#\\r\\n|nc127.0.0.111213
STORED
[root@zxqbin]#printfgetkey07\\r\\n|nc127.0.0.111213
VALUEkey07030
aaaaabbbbbcccccdddddeeeee_@@@#
END

prepend 將數(shù)據(jù)追加到當(dāng)前緩存數(shù)據(jù)的之前,當(dāng)緩存數(shù)據(jù)存在時(shí)才存儲(chǔ)

[root@zxqbin]#printfgetkey07\\r\\n|nc127.0.0.111213
VALUEkey07030
aaaaabbbbbcccccdddddeeeee_@@@#
END
[root@zxqbin]#printfprependkey07005\\r\\n#####\\r\\n|nc127.0.0.111213
STORED
[root@zxqbin]#printfgetkey07\\r\\n|nc127.0.0.111213
VALUEkey07035
#####aaaaabbbbbcccccdddddeeeee_@@@#
END

也可以使用Telnet連接memcached進(jìn)入交互式操作

9、客戶端的安裝

安裝lamp/LNMP環(huán)境,要求apache或nginx能解析PHP文件,才能繼續(xù)安裝客戶端

安裝memcache的php的客戶端及memcache的擴(kuò)展,下載php擴(kuò)展:http://pecl.php.net/package/memcache選擇要下載的memcache版本。java程序一樣需要客戶端(resion,tomcat),但不會(huì)像php一樣編譯。

在PHP服務(wù)器上安裝memcache客戶端:

wgethttp://pecl.php.net/get/memcache-2.2.5.tgz
tarzxfmemcache-2.2.5.tgz
cdmemcache-2.2.5
/usr/local/php/bin/phpize
./configure--enable-memcache--with-php-config=/usr/local/php/bin/php-config--with-zlib-dir
make
makeinstall
Installingsharedextensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@zxqmemcache-2.2.5]#ll/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

安裝完會(huì)在此文件中生成memcache.so文件

-rwxr-xr-x1rootroot2604515月717:59memcache.so
-rwxr-xr-x1rootroot5893085月420:59opcache.so

修改php.ini配置文件:指定memcache.so文件路徑

echoextension=memcache.so>>/usr/local/php/etc/php.ini
grep^extension/usr/local/php/etc/php.ini

重啟動(dòng)apache服務(wù)使php的配置生效

[root@zxq~]#apachectl-t
SyntaxOK
[root@zxq~]#apachectlgraceful

如果是nginx則重啟動(dòng)php-fpm服務(wù)

打開(kāi)phpinfo加載網(wǎng)頁(yè),能看到memcache模塊就算成功了!

建立測(cè)試文件,實(shí)現(xiàn)PHP與memcache交換數(shù)據(jù):

connect(\'10.0.0.4\',11212)ordie(couldnotconnect);
$memcache->set(\'key001\',\'123\');
$memcache->set(\'key002\',\'abc\');
$get_value001=$memcache->get(\'key001\');
$get_value002=$memcache->get(\'key002\');
echo$get_value002.
; echo$get_value001; ?>

訪問(wèn)目錄能讀到123,abc,php程序與memcache交互成功!

10、memcache實(shí)現(xiàn)web集群的session會(huì)話保持

修改所有web節(jié)點(diǎn)的php.ini配置文件指定session文件路徑到memcache服務(wù)器上

vim/usr/local/php/etc/php.ini
session.save_handler=memcache#指定session存儲(chǔ)方式
session.save_path=tcp://10.0.0.4:11212#指定session保存路徑
memcached-m15m-d-uroot-p11212-M-c8192-P/var/run/memcached.pid-f1.25-l10.0.0.4

集群架構(gòu)多服務(wù)器同步session的多種方式:

1)lb層可以做會(huì)話保持,例如

lvs -p

nginx ip_hash

hapoxy cookie insert

PHP,java都可以用

2)軟件層,可以做session復(fù)制,例如

tomcat,resion,couchbase

3)session共享,例如

memcache或其他工具的NoSQL工具,PHP常用這個(gè)

4)高并發(fā)場(chǎng)景:例如門戶網(wǎng)站用cookies或cookies配合session把用戶級(jí)會(huì)話信息緩存在用戶本地。

11、監(jiān)控memcache需要監(jiān)控的具體指標(biāo)

1)端口11212

2)命中率:STAT get_hits 3 STAT get_misses 4

3)反應(yīng)時(shí)間:STAT uptime 25336

監(jiān)控腳本:

#!/bin/sh
[$#-ne2]&&{
echo$0ipport
exit
}
exportkey1=key
exportwwwServerIp=$1
exportwwwServerPort=$2
cmd=nc$wwwServerIp$wwwServerPort
printfdelete$key1\\r\\n|$cmd>/dev/null2>&1
sleep1
printfset$key1006\\r\\n123\\r\\n|$cmd>/dev/null2>&1
if[`printfget$key1\\r\\n|$cmd|grep123|wc-l`-eq1]
then
echomcisalive.
exit0
else
echomcisdead.
exit2
fi

12、memcached調(diào)優(yōu)

計(jì)算item占用空間:

item總大小=鍵長(zhǎng)+值長(zhǎng)+后綴長(zhǎng)+item結(jié)構(gòu)大小(48字節(jié))+8(cas標(biāo)志占用)

如果item_cas標(biāo)志設(shè)置時(shí),會(huì)有8字節(jié)的數(shù)據(jù)

item結(jié)構(gòu)大?。?2位系統(tǒng)32字節(jié);64位系統(tǒng)48字節(jié)

例如:

memcached-uroot-p11212-vv
slabclass1:chunksize96perslab10922
slabclass2:chunksize120perslab8738
slabclass3:chunksize152perslab6898
slabclass4:chunksize192perslab5461
slabclass5:chunksize240perslab4369
slabclass6:chunksize304perslab3449
slabclass7:chunksize384perslab2730
slabclass8:chunksize480perslab2184
slabclass9:chunksize600perslab1747
slabclass10:chunksize752perslab1394
slabclass11:chunksize944perslab1110
slabclass12:chunksize1184perslab885
printfsetleng0040\\r\\n1111111111222222222211111111112222222222\\r\\n|nc127.0.0.111212
STORED

計(jì)算leng總長(zhǎng)度:48+8+4+40=100

所以leng值就會(huì)選擇slab 2的120字節(jié)里來(lái)存儲(chǔ)leng數(shù)據(jù):

[root@zxqhtdocs]#printfstatscachedump20\\r\\n|nc127.0.0.111212
ITEMleng[40b;1494182061s]
END

優(yōu)化方案:先估算將要存儲(chǔ)的數(shù)據(jù)大小值,再通過(guò)-f選項(xiàng)調(diào)優(yōu)chunk大小,以最小滿足存儲(chǔ)值大小存儲(chǔ)數(shù)據(jù),已達(dá)到最小內(nèi)存浪費(fèi)。

可使用-M啟動(dòng)memcache,不使用LRU算法刪除數(shù)據(jù),因?yàn)長(zhǎng)RU不是全局的,而是針對(duì)slab區(qū)域的。可以使用腳本檢測(cè)stats tiems的值,保證內(nèi)存空閑,清除過(guò)久未訪問(wèn)的數(shù)據(jù)。

13、zabbix監(jiān)控實(shí)例:

緩存命中率 = get_hits/cmd_get * 100% ;get_misses的數(shù)字加上get_hits應(yīng)該等于cmd_get

1)配置自動(dòng)發(fā)現(xiàn)腳本

catmemdiscover.sh
#!/bin/sh
#function:discoverymemcacheitems
memcache_discovery(){
Memitems=(`/usr/bin/printfstats\\r\\n|nc127.0.0.111212|awk\'{print$2}\'`)
length=${#Memitems[@]}
printf{\\n
printf\'\\t\'\\data\\:[
for((i=0;i<$length;i++))
do
printf\'\\n\\t\\t{\'
printf\\{#ITEMNAME}\\:\\${Memitems[$i]}\\}
if[$i-lt$[$length-1]];then
printf\',\'
fi
done
printf\\n\\t]\\n
printf}\\n
}

2)配置監(jiān)控腳本

catmemcached-status.conf
#!/bin/sh
#thisismemcachedststusscripts
#date2017-05-08
functionstatus(){
ip=127.0.0.1
port=11212
/usr/bin/printfstats\\r\\n|nc$ip$port
}
status|grep-w$1|awk\'{print$3}\'

3)配置web頁(yè)面

configureation => Templates => Create template

Template name:memcache_discovery

Groups In groups:nosql

configureation => Templates => memcache_discovery => Discovery => create discovery rule

name:memcache.stats

type:zabbix agent

key:memcache.stats

update interval:30

Fitters:{$ITEMANME}

configureation => Templates => memcache_discovery => item prototypes => create item prototype

name:mem.stat on $1

type:zabbix agent

key:mem.stats[{#ITEMNAME}]

configureation => Templates => memcache_discovery => Graph prototypes => create graph prototype

name:memcache on {#ITEMNAME}

items:Add prototype ==》 memcache_discovery:mem.stats on {#ITEMNAME}

$zabbix_get -s 127.0.0.1 -k mem.stats[get_hits]

61992


文章標(biāo)題:memcache配置
當(dāng)前鏈接:http://weahome.cn/article/cgppis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部