Memcached是一款開(kāi)源、高性能、分布式內(nèi)存對(duì)象緩存系統(tǒng),可應(yīng)用各種需要緩存的場(chǎng)景,其主要目的是通過(guò)降低對(duì)Database的訪問(wèn)來(lái)加速web應(yīng)用程序。它是一個(gè)基于內(nèi)存的“鍵值對(duì)”存儲(chǔ),用于存儲(chǔ)數(shù)據(jù)庫(kù)調(diào)用、API調(diào)用或頁(yè)面引用結(jié)果的直接數(shù)據(jù),如字符串、對(duì)象等。
集美網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。需要說(shuō)明下他和Memcache的區(qū)別,mencache是PHP服務(wù)器的一個(gè)模塊,用來(lái)和Memcached溝通。
數(shù)據(jù)存儲(chǔ)方式:Slab Allocation
將分配的內(nèi)存分割成各種尺寸的塊 (chunk),并把尺寸相同的塊分成組 (chunk的集合)
數(shù)據(jù)過(guò)期方式:Lazy Expiration + LRU
Lazy Expiration :memcached內(nèi)部不會(huì)監(jiān)視記錄是否過(guò)期,而是在get時(shí)查看記錄的時(shí)間戳,檢查記錄是否過(guò)期。這種技術(shù)被稱(chēng)為lazy(惰性)expiration。因此,memcached不會(huì)在過(guò)期監(jiān)視上耗費(fèi)CPU時(shí)間
LRU:memcached會(huì)優(yōu)先使用已超時(shí)的記錄的空間,但即使如此,也會(huì)發(fā)生追加新記錄時(shí)空間不足的情況,此時(shí)就要使用名為 Least Recently Used(LRU)機(jī)制來(lái)分配空間。顧名思義,這是刪除“最近最少使用”的記錄的機(jī)制。因此,當(dāng)memcached的內(nèi)存空間不足時(shí)(無(wú)法從slab class 獲取到新的空間時(shí)),就從最近未被使用的記錄中搜索,并將其空間分配給新的記錄。一、安裝libevent
一、memcached依賴(lài)于libevent API,項(xiàng)目主頁(yè):http://libevent.org/
1: # tar xf libevent-2.0.21-stable.tar.gz
2: # cd libevent-2.0.21
3: # ./configure --prefix=/usr/local/libevent
4: # make && make install
5:
6: # echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
7: # ldconfig
二、安裝配置memcached
1: # tar xf memcached-1.4.15.tar.gz
2: # cd memcached-1.4.15
3: # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
4: # make && make install
sysv腳本
#!/bin/bash # # Init file for memcached # # chkconfig: - 86 14 # description: Distributed memory caching daemon # # processname: memcached # config: /etc/sysconfig/memcached . /etc/rc.d/init.d/functions ## Default variables PORT="11211"USER="nobody"MAXCONN="1024"CACHESIZE="64"RETVAL=0 prog="/usr/local/memcached/bin/memcached"desc="Distributed memory caching"lockfile="/var/lock/subsys/memcached"start() { echo -n $"Starting $desc (memcached): " daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE RETVAL=$? [ $RETVAL -eq 0 ] && success && touch $lockfile || failure echo return $RETVAL } stop() { echo -n $"Shutting down $desc (memcached): " killproc $prog RETVAL=$? [ $RETVAL -eq 0 ] && success && rm -f $lockfile || failure echo return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading $desc ($prog): " killproc $prog -HUP RETVAL=$? [ $RETVAL -eq 0 ] && success || failure echo return $RETVAL }case "$1" in start) start ;; stop) stop ;; restart) restart ;; condrestart) [ -e $lockfile ] && restart RETVAL=$? ;; reload) reload ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" RETVAL=1 esac exit $RETVAL賦予執(zhí)行權(quán)限1: # chmod +x /etc/init.d/memcached
2: # chkconfig --add memcached
3: # service memcached start
三、memcached的常用選項(xiàng)說(shuō)明
-l
-d: 以服務(wù)模式運(yùn)行;
-u
-m
-c
-p
-U
-t
-f
-M:禁止使用LRU算法;
-n: 指定最小的slab chunk大小;單位是字節(jié);
-S: 啟用sasl進(jìn)行用戶(hù)認(rèn)證;
四、測(cè)試
memcached
存儲(chǔ)類(lèi)命令:set, add, replace, append, prepend
獲取數(shù)據(jù)類(lèi)命令:get, delete, incr/decr
統(tǒng)計(jì)類(lèi)命令:stats, stats items, stats slabs, stats sizes
清理命令: flush_all
訪問(wèn)Memcached:telnet 主機(jī)名 端口號(hào)
查看總狀態(tài):stats
查看某項(xiàng)狀態(tài):stats curr_connections
PS:我看到過(guò)有的介紹說(shuō)是“Memcached單進(jìn)程大使用內(nèi)存為2G,如果想用更多內(nèi)存,可以用用其他端口再開(kāi)啟”我沒(méi)測(cè)試過(guò),寫(xiě)出來(lái)當(dāng)個(gè)備忘。
上面很多內(nèi)容都引用了了mixi.jp 公司編寫(xiě)的《Memcached全面剖析》,大家對(duì)memcached感興趣請(qǐng)到通過(guò)下面鏈接查閱,講解的非常清晰。
http://blog.charlee.li/memcached-pdf/
五、為PHP安裝memcache模塊用作和memcached通信
1: # tar xf memcache-2.2.5.tgz
2: # cd memcache-2.2.5
3: /usr/local/php/bin/phpize
4: # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
5: # make && make install
編譯后會(huì)輸出/path/memcache.so文件,然后在/etc/php.ini中添加此行extension=/path/memcache.so
六、測(cè)試php和memcached工作是否成功
connect("127.0.0.1", 11211) or die("Could not connect"); #vim memcached.php $version = $mem->getVersion(); echo "Server's version: ".$version."如果輸出“Hello World is from memcached.”表示成功,反之就不用說(shuō)了吧!
七、libmemcached工具:
libMemcached則是基于C語(yǔ)言開(kāi)發(fā)的開(kāi)源的C/C++代碼訪問(wèn)memcached的庫(kù)文件,可以讓memcached和c/c++一起工作。同時(shí)它還提供了數(shù)個(gè)可以遠(yuǎn)程使用的memcached管理工具。
安裝:
1: # tar xf libmemcached-1.0.2.tar.gz
2: # cd libmemcached-1.0.2
3: # ./configure
4: # make && make install
5: # ldconfig
管理工具:
1: # memcat --servers=127.0.0.1:11211 mykey
2: # memping
3: # memslap
4: # memstat
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。