新聞中心
一.什么是memcache?
memcache是一套分布式的高速緩存系統(tǒng),對于一些大型的、需要頻繁訪問數(shù)據(jù)庫的網(wǎng)站訪問速度提升效果十分顯著,是一套開放源代碼軟件。它通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫檢索的結(jié)果等。簡單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。服務(wù)器端主程序memcached是以守護(hù)程序(監(jiān)聽)方式運(yùn)行于一個(gè)或多個(gè)服務(wù)器中,隨時(shí)會接收客戶端的連接和操作,大同時(shí)連接數(shù)為200。memcache既支持TCP協(xié)議,也支持UDP協(xié)議。
二.memcache的工作流程
memcache先檢查客戶端的請求數(shù)據(jù)是否在memcached中,如有,直接把請求數(shù)據(jù)返回,不再對數(shù)據(jù)庫進(jìn)行任何操作;如果請求的數(shù)據(jù)不在memcached中,就去查數(shù)據(jù)庫,把從數(shù)據(jù)庫中獲取的數(shù)據(jù)返回給客戶端,同時(shí)把數(shù)據(jù)緩存一份到memcached中(memcached客戶端不負(fù)責(zé),需要程序明確實(shí)現(xiàn));每次更新數(shù)據(jù)庫的同時(shí)更新memcached中的數(shù)據(jù),保證一致性;當(dāng)分配給memcached內(nèi)存空間用完之后,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數(shù)據(jù)首先被替換,然后再替換掉最近未使用的數(shù)據(jù)。
三.memcached與redis
redis是一個(gè)開源的日志型、Key-Value數(shù)據(jù)庫,與memcache相比,有如下區(qū)別:
1.memcached所有數(shù)據(jù)一直存儲在內(nèi)存中,而redis并不是;
2.memcached只支持簡單的key/value類型的數(shù)據(jù),redis支持list、set、hash等數(shù)據(jù)結(jié)構(gòu)的存儲;
3.redis支持?jǐn)?shù)據(jù)的備份,即主從數(shù)據(jù)的復(fù)制;
4.redis支持?jǐn)?shù)據(jù)的持久化,可以講內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
四.memcached在php中的簡單應(yīng)用
系統(tǒng)環(huán)境:rhel6 x32 selinux and iptables disabled
主機(jī)角色:172.25.46.1 nginx php memcached
此實(shí)驗(yàn)中關(guān)于nginx和php的安裝不再講解,可參考我之前的文章《基于lnmp架構(gòu)的Dsicuz論壇》
獲取源碼包并進(jìn)行解壓縮
# tar zxf memcache-2.2.5.tgz
cd memcache-2.2.5
配置環(huán)境變量
# vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
# source ~/.bash_profil
使用phpzie擴(kuò)展php模塊,即在php中加入memcached模塊
# phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
# ./configure --enable-memcache
# make &&make install
Installing shared extensions: /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20100525/
# cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20100525/
# ll memcache.so
-rwxr-xr-x 1 root root 259040 Jan 16 14:00memcache.so
memcached為php做緩存
# cd /usr/local/lnmp/php/etc
# vim php.ini
844 ; extension=msql.so
845 extension=memcache.so
編寫php函數(shù)
# cd /usr/local/lnmp/nginx/html
# vim index.php
phpinfo()
?>
開啟nginx及php服務(wù)
# nginx
# nginx -s reload
# /etc/init.d/fpmrestart
此時(shí)可以使用瀏覽器測試php頁面,我在實(shí)驗(yàn)中訪問的是172.25.46.1/index.php,如圖:
安裝并啟動memcached服務(wù)
# yum install -y memcached.x86_64
# /etc/init.d/memcached start
測試端口
# telnetlocalhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
stats ##查看memcached狀態(tài)
STAT pid 4664
STAT uptime 72
STAT time 1452925893
STAT version 1.4.4
......
STAT curr_items 0
STAT total_items 0
STAT evictions 0
END
quit
將memcached監(jiān)控頁面放到nignx的發(fā)布目錄下
# cd memcache-2.2.5
# cp memcache.php /usr/local/lnmp/nginx/html/
# cd /usr/local/lnmp/nginx/html/
# vim memcache.php
$VERSION='$Id: memcache.php,v 1.22008/09/11 19:21:06 mikl Exp $';
define('ADMIN_USERNAME','memcache'); // Admin Username
define('ADMIN_PASSWORD','westos'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
$MEMCACHE_SERVERS[] = '172.25.46.1:11211';// add more as an array #監(jiān)聽本機(jī)的11211端口
#$MEMCACHE_SERVERS[] ='mymemcache-server2:11211'; // add more as an array
注意:在此實(shí)驗(yàn)中,編輯此文件時(shí)要將后兩行注釋掉一行。我在實(shí)驗(yàn)開始,都打開后,可以訪問到監(jiān)控頁面,但是顯示不了監(jiān)控畫面。
編寫測試頁面
# vim test.php
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211)or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version:".$version."\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object,false, 10) or die ("Failed to save data at the
server");
echo "Store data in the cache (datawill expire in 10 seconds)\n";
$get_result = $memcache->get('key');
echo "Data from the cache:\n";
var_dump($get_result);
?>
此時(shí)可以使用瀏覽器訪問memcached監(jiān)控頁面,我在實(shí)驗(yàn)中訪問的是172.25.46.1/memcache.php,用戶及密碼是文件memcache.php編輯的,如圖:
進(jìn)入監(jiān)控頁面,可以看到緩存使用為0,命中率為50%:
訪問test.php頁面,對memcached進(jìn)行測試,實(shí)驗(yàn)中我訪問的是172.25.46.1/test.php,如圖:
刷新此頁面,再觀察memcached監(jiān)控頁面發(fā)生變化,緩存使用為119.0,命中率為85.7%,如圖:
這是一個(gè)簡單的memcached在php中的應(yīng)用,如您發(fā)現(xiàn)博文中存在問題或者您有更好地建議和意見可及時(shí)反饋給我哦~謝謝您的來訪!
另外有需要云服務(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)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站名稱:淺解memcache-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://www.ef60e0e.cn/article/ddgech.html