欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

memcache配置-創(chuàng)新互聯(lián)

1、memecached介紹

作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們?cè)跇I(yè)內(nèi)良好的客戶口碑。創(chuàng)新互聯(lián)公司提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)站建設(shè)、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運(yùn)營等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡(luò)營銷方法,創(chuàng)造更大的價(jià)值。

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

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

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

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

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

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

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

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

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

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

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

1)程序端實(shí)現(xiàn):程序加載所有memcached的ip列表,通過對(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語言編寫,總代碼為2000多行

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

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

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)無法知道內(nèi)存具體位置時(shí),想要綁定內(nèi)存空間,就需要用到動(dòng)態(tài)的分配內(nèi)存。

早期的memcached內(nèi)存管理方式是通過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)程本地還慢,為了解決上述問題,slab allocator內(nèi)存分配機(jī)制就誕生了。

Slab Allocation機(jī)制原理是按照預(yù)先規(guī)定的大小,將分配給memcached的內(nèi)存分割成特定長度的內(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ù)語:

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ù)期平均長度,調(diào)整這個(gè)參數(shù)來獲取合適的設(shè)置值。

-f <factor>  chunk size growth factor(default:1.25)

例如:

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

memcached -m 512m -d -u root -c 8192 -f 2 -vv [root@zxq tmp]# slab class   1: chunk size        96 perslab   10922 slab class   2: chunk size       192 perslab    5461 slab class   3: chunk size       384 perslab    2730 slab class   4: chunk size       768 perslab    1365 slab class   5: chunk size      1536 perslab     682 slab class   6: chunk size      3072 perslab     341 slab class   7: chunk size      6144 perslab     170 slab class   8: chunk size     12288 perslab      85 slab class   9: chunk size     24576 perslab      42 slab class  10: chunk size     49152 perslab      21 slab class  11: chunk size     98304 perslab      10 slab class  12: chunk size    196608 perslab       5 slab class  13: chunk size    393216 perslab       2 slab class  14: chunk size   1048576 perslab       1 <26 server listening (auto-negotiate) <27 server listening (auto-negotiate) <28 send buffer was 124928, now 268435456 <29 send buffer was 124928, now 268435456 <28 server listening (udp) <29 server listening (udp) <28 server listening (udp) <29 server listening (udp) <28 server listening (udp) <29 server listening (udp) <28 server listening (udp) <29 server listening (udp)

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

[root@zxq tmp]# memcached -m 512m -d -u root -c 8192 -f 1.25 -vv [root@zxq tmp]# slab class   1: chunk size        96 perslab   10922 slab class   2: chunk size       120 perslab    8738 slab class   3: chunk size       152 perslab    6898 slab class   4: chunk size       192 perslab    5461 slab class   5: chunk size       240 perslab    4369 slab class   6: chunk size       304 perslab    3449 slab class   7: chunk size       384 perslab    2730 slab class   8: chunk size       480 perslab    2184 slab class   9: chunk size       600 perslab    1747 slab class  10: chunk size       752 perslab    1394 slab class  11: chunk size       944 perslab    1110 slab class  12: chunk size      1184 perslab     885 slab class  13: chunk size      1480 perslab     708 slab class  14: chunk size      1856 perslab     564 slab class  15: chunk size      2320 perslab     451 slab class  16: chunk size      2904 perslab     361 slab class  17: chunk size      3632 perslab     288 slab class  18: chunk size      4544 perslab     230 slab class  19: chunk size      5680 perslab     184 slab class  20: chunk size      7104 perslab     147 slab class  21: chunk size      8880 perslab     118 slab class  22: chunk size     11104 perslab      94 slab class  23: chunk size     13880 perslab      75 slab class  24: chunk size     17352 perslab      60 slab class  25: chunk size     21696 perslab      48 slab class  26: chunk size     27120 perslab      38 slab class  27: chunk size     33904 perslab      30 slab class  28: chunk size     42384 perslab      24 slab class  29: chunk size     52984 perslab      19 slab class  30: chunk size     66232 perslab      15 slab class  31: chunk size     82792 perslab      12 slab class  32: chunk size    103496 perslab      10 slab class  33: chunk size    129376 perslab       8 slab class  34: chunk size    161720 perslab       6 slab class  35: chunk size    202152 perslab       5 slab class  36: chunk size    252696 perslab       4 slab class  37: chunk size    315872 perslab       3 slab class  38: chunk size    394840 perslab       2 slab class  39: chunk size    493552 perslab       2 slab class  40: chunk size    616944 perslab       1 slab class  41: chunk size    771184 perslab       1 slab class  42: chunk size   1048576 perslab       1 failed to listen on TCP port 11211: Address already in use

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

memecached主要的cache機(jī)制是LRU最近最少用的算法,加上item過期失效,當(dāng)存儲(chǔ)數(shù)據(jù)到memcached中,可指定該數(shù)據(jù)在緩存中可以呆多久,如果memcached的內(nèi)存不夠用了,過期的slabs會(huì)優(yōu)先被替換,接著就會(huì)輪到最老的未被使用的slabs。在某些情況下(完整緩存),如果不想使用LRU算法,可以通過"-M"參數(shù)來啟動(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事件庫文件的,所以要先安裝libevetn:

wget https://github.com/downloads/libevent/libevent/libevent-1.4.13-stable.tar.gz tar zxf libevent-1.4.13-stable.tar.gz  cd libevent-1.4.13-stable ./configure  make make install cd ..

安裝memcached:

wget http://memcached.org/files/old/memcached-1.4.13.tar.gz tar zxf memcached-1.4.13.tar.gz  cd memcached-1.4.13 ./configure  make make install cd ..

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

[root@zxq tools]# memcached -m 1m -p 11212 -d -c 8192 memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 解決方法:就是讓系統(tǒng)能加載到libevent庫文件。 echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig

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

[root@zxq memcached-1.4.13]# which memcached /usr/local/bin/memcached memcached -m 16m -p 11212 -d -u root -c 8192 lsof -i :11212 COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME memcached 46673 root   26u  IPv4 244455      0t0  TCP *:11212 (LISTEN) memcached 46673 root   27u  IPv6 244456      0t0  TCP *:11212 (LISTEN) memcached 46673 root   28u  IPv4 244459      0t0  UDP *:11212  memcached 46673 root   29u  IPv6 244460      0t0  UDP *:11212  netstat -lntup|grep memcached tcp        0      0 0.0.0.0:11212               0.0.0.0:*                   LISTEN      46673/memcached      tcp        0      0 :::11212                    :::*                        LISTEN      46673/memcached      udp        0      0 0.0.0.0:11212               0.0.0.0:*                               46673/memcached      udp        0      0 :::11212                    :::*                                    46673/memcached      ps -ef|grep memcached root     46673     1  0 17:15 ?        00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192

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

-p 指定memcached服務(wù)監(jiān)聽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ā)訪問量來設(shè)置

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

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

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

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

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

其他選擇,通過memcached -h查看

memcached -m 15m -d -u root -p 11213 -M -c 8192 -P /var/run/memcached.pid -f 1.25 -l 127.0.0.1

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

語法:<command name> <key> <flags> <exptime> <bytes>\r\n<data block>\r

set k01 0 0 10\r\n9999999999\r

<command name>      set/add/replace

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

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

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

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

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

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

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

<data block>\r\n  <data block>是大段的8位數(shù)據(jù),其長度由前面的命令行中的<bytes>指定

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

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

[root@zxq lib]# printf "set k01 0 0 10\r\n9999999999\r\n"|nc 127.0.0.1 11212 STORED

get查看key k01的value:

[root@zxq lib]# printf "get k01\r\n"|nc 127.0.0.1 11212 VALUE k01 0 10 9999999999 END

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

[root@zxq lib]# printf "delete k01\r\n"|nc 127.0.0.1 11212 DELETED

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

[root@zxq bin]# printf "set key01 0 0 2\r\nab\r\n"|nc 127.0.0.1 11213 STORED [root@zxq bin]# printf "add key01 0 0 2\r\nab\r\n"|nc 127.0.0.1 11213 NOT_STORED

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

[root@zxq bin]# printf "replace key01 0 0 2\r\n88\r\n"|nc 127.0.0.1 11213 STORED [root@zxq bin]# printf "replace key02 0 0 2\r\n99\r\n"|nc 127.0.0.1 11213 NOT_STORED

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

[root@zxq bin]# printf "set key03 0 0 5\r\n55555\r\n"|nc 127.0.0.1 11213 STORED [root@zxq bin]# printf "gets key03\r\n"|nc 127.0.0.1 11213 VALUE key03 0 5 5 55555 END [root@zxq bin]# printf "get key03\r\n"|nc 127.0.0.1 11213 VALUE key03 0 5 55555 END

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

[root@zxq bin]# printf "gets key03\r\n"|nc 127.0.0.1 11213 VALUE key03 0 5 7 88888 END [root@zxq bin]# printf "cas key03 0 0 5 8\r\n99999\r\n"|nc 127.0.0.1 11213 EXISTS [root@zxq bin]# printf "cas key03 0 0 5 7\r\n99999\r\n"|nc 127.0.0.1 11213 STORED [root@zxq bin]# printf "gets key03\r\n"|nc 127.0.0.1 11213 VALUE key03 0 5 8 99999 END

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

[root@zxq tmp]# printf "stats \r\n"|nc 127.0.0.1 11212 STAT pid 46673              進(jìn)程ID STAT uptime 25336           服務(wù)器運(yùn)行秒數(shù) STAT time 1494173893        服務(wù)器當(dāng)前unix時(shí)間戳 STAT version 1.4.13         memcached版本 STAT libevent 1.4.13-stable  libevent版本 STAT pointer_size 64         操作系統(tǒng)位數(shù),64位 STAT rusage_user 0.642902    進(jìn)程累計(jì)用戶時(shí)間 STAT rusage_system 0.303953  進(jìn)程累計(jì)系統(tǒng)時(shí)間 STAT curr_connections 10     當(dāng)前打開連接數(shù) STAT total_connections 25    memecached運(yùn)行以來連接總數(shù) STAT connection_structures 11  memcached分配的連接結(jié)構(gòu)數(shù) STAT reserved_fds 20         內(nèi)部使用的FD數(shù) STAT cmd_get 7               執(zhí)行g(shù)et命令總數(shù) STAT cmd_set 3               執(zhí)行set命令總數(shù) STAT cmd_flush 0             執(zhí)行flush_all命令總數(shù) STAT cmd_touch 0             touch命令請(qǐng)求總數(shù) STAT get_hits 3              get命中次數(shù) STAT get_misses 4            get未命中次數(shù) STAT delete_misses 0         delete未命中次數(shù) STAT delete_hits 1           delete命中次數(shù) STAT incr_misses 0           incr未命中次數(shù) STAT incr_hits 0             incr命中次數(shù) STAT decr_misses 0           decr未命中次數(shù) STAT decr_hits 0             decr命中次數(shù) STAT cas_misses 0            cas未命中次數(shù) STAT cas_hits 0              cas命中次數(shù) STAT cas_badval 0            使用擦拭次數(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 358          讀取字節(jié)總數(shù) STAT bytes_written 160       寫入字節(jié)總數(shù) STAT limit_maxbytes 16777216  分配的內(nèi)存總數(shù)(字節(jié)) STAT accepting_conns 1       目前接受的連接數(shù) STAT listen_disabled_num 0   失效的監(jiān)聽數(shù) STAT threads 4               線程數(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 expired_unfetched 0     已過期但未獲取大對(duì)象數(shù)目 STAT evicted_unfetched 0     已驅(qū)逐但未獲取大對(duì)象數(shù)目 STAT bytes 166               當(dāng)前存儲(chǔ)占用字節(jié)數(shù) STAT curr_items 2            當(dāng)前存儲(chǔ)的數(shù)據(jù)總個(gè)數(shù) STAT total_items 3           啟動(dòng)以來存儲(chǔ)的數(shù)據(jù)總數(shù) STAT evictions 0             LRU釋放的對(duì)象數(shù)目 STAT reclaimed 0             已過期的數(shù)據(jù)條目來存儲(chǔ)新數(shù)據(jù)的數(shù)目 END

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

[root@zxq bin]# printf "stats items\r\n"|nc 127.0.0.1 11213 STAT items:1:number 4                該slab中對(duì)象數(shù)(不包含過期對(duì)象) STAT items:1:age 1941                LRU隊(duì)列中最老對(duì)象的過期時(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 0             使用過期對(duì)象空間存儲(chǔ)對(duì)象次數(shù) STAT items:1:expired_unfetched 0     已過期但未獲取的對(duì)象數(shù)目 STAT items:1:evicted_unfetched 0     已驅(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@zxq bin]# printf "stats items\r\n"|nc 127.0.0.1 11213 STAT items:1:number 5 STAT items:1:age 2589 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 STAT items:2:number 1 STAT items:2:age 3 STAT items:2:evicted 0 STAT items:2:evicted_nonzero 0 STAT items:2:evicted_time 0 STAT items:2:outofmemory 0 STAT items:2:tailrepairs 0 STAT items:2:reclaimed 0 STAT items:2:expired_unfetched 0 STAT items:2:evicted_unfetched 0 END [root@zxq bin]# printf "stats cachedump 1 0\r\n"|nc 127.0.0.1 11213 ITEM key04 [15 b; 1494188606 s] ITEM key03 [5 b; 1494188606 s] ITEM key01 [2 b; 1494188606 s] ITEM userID [5 b; 1494188606 s] ITEM userid [5 b; 1494188606 s] END [root@zxq bin]# printf "stats cachedump 2 0\r\n"|nc 127.0.0.1 11213 ITEM key05 [35 b; 1494188606 s] END

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

printf "stats slabs\r\n"|nc 127.0.0.1 11213 STAT 1:chunk_size 96            chunk大小(byte) STAT 1:chunks_per_page 10922    每個(gè)page的chunk數(shù)量 STAT 1:total_pages 1            page數(shù)量 STAT 1:total_chunks 10922       chunk總數(shù)量(chunks_per_page*total_pages)  STAT 1:used_chunks 6            已被分配的chunk數(shù)量 STAT 1:free_chunks 1            過期數(shù)據(jù)空出的chunk數(shù) STAT 1:free_chunks_end 10915    從未被使用過的chunk數(shù) STAT 1:mem_requested 481        請(qǐng)求存儲(chǔ)的字節(jié)數(shù) STAT 1:get_hits 6                get命令命中數(shù) STAT 1:cmd_set 17 STAT 1:delete_hits 0 STAT 1:incr_hits 0 STAT 1:decr_hits 0 STAT 1:cas_hits 3 STAT 1:cas_badval 1            cas數(shù)據(jù)類型錯(cuò)誤數(shù) STAT 1:touch_hits 0            touch命令命中數(shù) STAT 2:chunk_size 120 STAT 2:chunks_per_page 8738 STAT 2:total_pages 1 STAT 2:total_chunks 8738 STAT 2:used_chunks 2 STAT 2:free_chunks 0 STAT 2:free_chunks_end 8736 STAT 2:mem_requested 207 STAT 2:get_hits 0 STAT 2:cmd_set 3 STAT 2:delete_hits 0 STAT 2:incr_hits 0 STAT 2:decr_hits 0 STAT 2:cas_hits 0 STAT 2:cas_badval 0 STAT 2:touch_hits 0 STAT active_slabs 2 STAT total_malloced 2097072 END

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

[root@zxq bin]# printf "stats settings\r\n"|nc 127.0.0.1 11213 STAT maxbytes 15728640 STAT maxconns 8192 STAT tcpport 11213 STAT udpport 11213 STAT inter 127.0.0.1 STAT verbosity 0 STAT oldest 3537 STAT evictions off STAT domain_socket NULL STAT umask 700 STAT growth_factor 1.25 STAT chunk_size 48 STAT num_threads 4 STAT num_threads_per_udp 4 STAT stat_key_prefix : STAT detail_enabled no STAT reqs_per_event 20 STAT cas_enabled yes STAT tcp_backlog 1024 STAT binding_protocol auto-negotiate STAT auth_enabled_sasl no STAT item_size_max 1048576 STAT maxconns_fast no STAT hashpower_init 0 STAT slab_reassign no STAT slab_automove no END

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

[root@zxq bin]# printf "stats sizes\r\n"|nc 127.0.0.1 11213 STAT 96 6 STAT 128 2 END

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

printf "stats reset\r\n"|nc 127.0.0.1 11213

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

[root@zxq bin]# printf "flush_all\r\n"|nc 127.0.0.1 11213 OK

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

[root@zxq bin]# printf "get key07\r\n"|nc 127.0.0.1 11213 VALUE key07 0 25 aaaaabbbbbcccccdddddeeeee END [root@zxq bin]# printf "append key07 0 0 5\r\n_@@@#\r\n"|nc 127.0.0.1 11213 STORED [root@zxq bin]# printf "get key07\r\n"|nc 127.0.0.1 11213 VALUE key07 0 30 aaaaabbbbbcccccdddddeeeee_@@@# END

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

[root@zxq bin]# printf "get key07\r\n"|nc 127.0.0.1 11213 VALUE key07 0 30 aaaaabbbbbcccccdddddeeeee_@@@# END [root@zxq bin]# printf "prepend key07 0 0 5\r\n#####\r\n"|nc 127.0.0.1 11213 STORED [root@zxq bin]# printf "get key07\r\n"|nc 127.0.0.1 11213 VALUE key07 0 35 #####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客戶端:

wget http://pecl.php.net/get/memcache-2.2.5.tgz tar zxf memcache-2.2.5.tgz  cd memcache-2.2.5 /usr/local/php/bin/phpize  ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir make make install Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/ [root@zxq memcache-2.2.5]# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

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

-rwxr-xr-x 1 root root 260451 5月   7 17:59 memcache.so -rwxr-xr-x 1 root root 589308 5月   4 20:59 opcache.so

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

echo "extension=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 Syntax OK [root@zxq ~]# apachectl graceful

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

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

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

<?php $memcache = new memcache; $memcache->connect('10.0.0.4', 11212) or die ("could not connect"); $memcache->set('key001', '123'); $memcache->set('key002', 'abc'); $get_value001 = $memcache->get('key001'); $get_value002 = $memcache->get('key002'); echo $get_value002."<br>"; echo $get_value001; ?>

訪問目錄能讀到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 -m 15m -d -u root -p 11212 -M -c 8192 -P /var/run/memcached.pid -f 1.25 -l 10.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 [ $# -ne 2 ]&&{  echo "$0 ip port"  exit } export key1=key export wwwServerIp=$1 export wwwServerPort=$2 cmd="nc $wwwServerIp $wwwServerPort" printf "delete $key1\r\n" | $cmd >/dev/null 2>&1 sleep 1 printf "set $key1 0 0 6\r\n123\r\n"|$cmd >/dev/null 2>&1 if [ `printf "get $key1\r\n"|$cmd|grep 123|wc -l` -eq 1 ]   then       echo "mc is alive."       exit 0 else       echo "mc is dead."       exit 2 fi

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

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

item總大小=鍵長+值長+后綴長+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)大小:32位系統(tǒng)32字節(jié);64位系統(tǒng)48字節(jié)

例如:

memcached -u root -p 11212 -vv slab class   1: chunk size        96 perslab   10922 slab class   2: chunk size       120 perslab    8738 slab class   3: chunk size       152 perslab    6898 slab class   4: chunk size       192 perslab    5461 slab class   5: chunk size       240 perslab    4369 slab class   6: chunk size       304 perslab    3449 slab class   7: chunk size       384 perslab    2730 slab class   8: chunk size       480 perslab    2184 slab class   9: chunk size       600 perslab    1747 slab class  10: chunk size       752 perslab    1394 slab class  11: chunk size       944 perslab    1110 slab class  12: chunk size      1184 perslab     885 printf "set leng 0 0 40\r\n1111111111222222222211111111112222222222\r\n"|nc 127.0.0.1 11212 STORED

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

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

[root@zxq htdocs]# printf "stats cachedump 2 0\r\n"|nc 127.0.0.1 11212 ITEM leng [40 b; 1494182061 s] END

優(yōu)化方案:先估算將要存儲(chǔ)的數(shù)據(jù)大小值,再通過-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)長RU不是全局的,而是針對(duì)slab區(qū)域的。可以使用腳本檢測(cè)stats tiems的值,保證內(nèi)存空閑,清除過久未訪問的數(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)腳本

cat memdiscover.sh  #!/bin/sh #function:discovery memcache items memcache_discovery () {     Memitems=(`/usr/bin/printf "stats\r\n"|nc 127.0.0.1 11212|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)控腳本

cat memcached-status.conf  #!/bin/sh #this is memcached ststus scripts #date 2017-05-08 function status (){ ip=127.0.0.1 port=11212 /usr/bin/printf "stats\r\n"|nc $ip $port } status | grep -w $1 | awk '{print $3}'

3)配置web頁面

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站名稱:memcache配置-創(chuàng)新互聯(lián)
文章分享:http://www.chinadenli.net/article38/djcopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版面包屑導(dǎo)航移動(dòng)網(wǎng)站建設(shè)企業(yè)建站網(wǎng)站導(dǎo)航網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營