PHP數(shù)據(jù)庫(kù)操作二:memcache用法分析
本文實(shí)例講述了PHP數(shù)據(jù)庫(kù)操作之memcache用法。分享給大家供大家參考,具體如下:
在一個(gè)高并發(fā)的web應(yīng)用中,數(shù)據(jù)庫(kù)存取瓶頸一直是個(gè)大問題,一旦達(dá)到某個(gè)極限,數(shù)據(jù)庫(kù)很容易崩潰,但是如果我們把常用的數(shù)據(jù)放到內(nèi)存中,在需要的時(shí)候從內(nèi)存中取,不光讀取速度快,而且節(jié)約數(shù)據(jù)庫(kù)IO。
memcache簡(jiǎn)介
Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。簡(jiǎn)單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。
memcache的mem是內(nèi)存(memory),cache是緩存,結(jié)合是內(nèi)存緩存的意思。我們應(yīng)用memcache時(shí),讀取數(shù)據(jù)先從memcache內(nèi)讀取,若查找不到再去數(shù)據(jù)庫(kù)里查找,并將數(shù)據(jù)存入memcache,待下次查找時(shí)便能輕易找到。
需要注意:
memcache是內(nèi)存型的數(shù)據(jù)庫(kù) ,因?yàn)閮?nèi)存的關(guān)閉釋放的特性,memcache也無法持久化存儲(chǔ)內(nèi)容;
memcache內(nèi)部是分塊存儲(chǔ),所以大于1M的數(shù)據(jù)也無法存儲(chǔ)。
memcache依賴libevent庫(kù),安裝前需確認(rèn)已經(jīng)安裝了libevent庫(kù)。
memcache是一個(gè)輕量級(jí)的內(nèi)存型數(shù)據(jù)庫(kù),只支持key-value型的存儲(chǔ)。
memcache中沒有關(guān)于用戶,密碼的設(shè)置,所以在配置時(shí)要配置防火墻的端口限制連接,以達(dá)到安全的目的。
使用repcached也能輕易實(shí)現(xiàn)memcache的單master單slave主從復(fù)制。
memcache的應(yīng)用場(chǎng)景
存儲(chǔ)大量不需要持久存儲(chǔ)或數(shù)據(jù)庫(kù)內(nèi)已存在不會(huì)變動(dòng)的數(shù)據(jù)。
讀取數(shù)據(jù)非常頻繁數(shù)據(jù),要求小于1M。
數(shù)據(jù)類型簡(jiǎn)單的key-value型數(shù)據(jù)。
計(jì)算好的結(jié)果和渲染后的網(wǎng)頁(yè)模板文件。
因其原子遞增性,可以用來計(jì)數(shù)。
因?yàn)榭梢栽O(shè)置數(shù)據(jù)過期時(shí)間的特性,存儲(chǔ)期限數(shù)據(jù)。不過需要注意,memcache會(huì)在分配的內(nèi)存不足時(shí)以最近最少使用原則(LRU)重用內(nèi)存,可能會(huì)導(dǎo)致信息提前被刪除。
用memcache存儲(chǔ)session信息,以達(dá)到多服務(wù)器session共享。需要配置:php.ini:
session.save_handler = memcache //設(shè)置session的儲(chǔ)存方式為memcache memcache.hash_strategy = "consistent"http://設(shè)置memcache的hash算法為一致性哈希算法。 session.save_path = "tcp:/ip:port" //設(shè)置session儲(chǔ)存的位置,多臺(tái)memcache用逗號(hào)隔開。
memcache服務(wù)器的安裝
memcache的安裝簡(jiǎn)單,服務(wù)器可以在其官網(wǎng)http://www.memcached.org/下載,解壓后在其目錄下運(yùn)行./configure -prefix=/path編譯,然后make / make test / make install 得到可以直接執(zhí)行的二進(jìn)制文件。
使用./memcached命令即可開啟服務(wù)器,其常用參數(shù)如下:
-p port 監(jiān)聽端口 (默認(rèn): 11211)
-d 以后臺(tái)方式運(yùn)行Memcached
-u username 運(yùn)行Memcached的賬戶
-m n 最大的內(nèi)存使用, 單位是MB,默認(rèn) 64 MB
-c connections 最大連接數(shù)量, 默認(rèn)是 1024
memcache的常用命令
用memcache客戶端或telnet連接到memcache后,就可以對(duì)memcache進(jìn)行操作了。
memcache數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單,所以命令行命令也很少,下面以一條常用命令來簡(jiǎn)析一下命令格式:
add key flags expire_time length \r\n value
flags:是否壓縮/序列化,通常為0。
expire_time:從存儲(chǔ)后多久過期。以秒(s)為單位,最大為30天的長(zhǎng)度,超過30天的長(zhǎng)度被視為時(shí)間戳表示"到什么時(shí)候過期",若設(shè)為0表示永不過期。
length:value長(zhǎng)度,輸入長(zhǎng)度回車之后,命令行會(huì)讀取你接下來輸入的length個(gè)字符。
set key flags expire_time length //如果有值則覆蓋原值,沒有則新增,add在有值時(shí)會(huì)存儲(chǔ)失敗 get key //獲取key的值 replace key flags expire_time length// 替換一個(gè)已存在的key append/preappend key flags expire_time length// 給key的value后面/前面添加新內(nèi)容。 preappend key flags expire_time length // 給key的value前面添加新內(nèi)容。 inc/dec key [n] //key的值遞增/遞減1/[n] delete key //刪除一個(gè)key flush_all [n] //[在n秒后]刪除全部數(shù)據(jù) stats [options] //獲取memcache[有關(guān)某一項(xiàng)]的詳細(xì)信息
PHP的memcache擴(kuò)展及應(yīng)用
在https://pecl.php.net/index.php搜索獲取到所需的memcache擴(kuò)展包。
linux系統(tǒng),直接挑選版本(推薦最新stable穩(wěn)定版)下載,解壓后在解壓目錄下用phpize工具產(chǎn)生configure文件,并用它安裝,安裝完成后在/php.ini中添加extension。具體可參考前文:http://www.dbjr.com.cn/article/121314.htm。
windows下要點(diǎn)擊鏈接右邊的“windows logo DLL”鏈接,并在新打開的頁(yè)面中,按照版本、32位/64位、線程安全/非線程安全來選擇自己所需要的擴(kuò)展,具體選項(xiàng)可以在phpinfo();頁(yè)面看到。下載完成后,將其放入phppath/ext/目錄下,然后在php.ini中添加extension=php_memcacache.dll;重啟服務(wù)器完成安裝。
在phpinfo()頁(yè)面中看到memcache擴(kuò)展后,說明安裝成功,我們就可以在php腳本中使用關(guān)于memcache的類函數(shù)庫(kù)了。
在手冊(cè)中我們可以找到許多關(guān)于php的memcache擴(kuò)展的使用,以下是一個(gè)典型的memcache使用流程。
$m=new Memcache(); $m->connect($host,$port); $m->add($key,$value[,flags,$expire_time]); $content=$m->get($key); $m->close();
這是一個(gè)簡(jiǎn)單的memcache連接程序,在進(jìn)行memcache分布式存儲(chǔ)時(shí),還需要用到$memcache->addServer()
向memcache集群中添加服務(wù)器。
此外,還有g(shù)et(),set(),flush(),delete()等方法,用法都大同小異,在手冊(cè)上也能找得到,這里提供一個(gè)本站的php手冊(cè)下載地址:http://www.dbjr.com.cn/books/6183.html
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php緩存技術(shù)總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP錯(cuò)誤與異常處理方法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP中的Memcache詳解
- php模塊memcache和memcached區(qū)別分析
- PHP memcache擴(kuò)展的三種安裝方法
- php擴(kuò)展memcached和memcache的安裝配置方法
- PHP操作Memcache實(shí)例介紹
- windows環(huán)境下php配置memcache的具體操作步驟
- centos系統(tǒng)為php安裝memcached擴(kuò)展步驟
- 基于php使用memcache存儲(chǔ)session的詳解
- PHP+memcache實(shí)現(xiàn)消息隊(duì)列案例分享
- Memcache 在PHP中的使用技巧
- PHP MemCached高級(jí)緩存配置圖文教程
相關(guān)文章
PHP更新購(gòu)物車數(shù)量(表單部分/PHP處理部分)
購(gòu)物車的數(shù)量是根據(jù)用戶的選擇商品加入而不斷增加的,下面是具體的實(shí)現(xiàn)代碼(客服端部分/PHP服務(wù)器端處理),有類似需求的朋友可以參考下2013-05-05PHP 如何獲取二維數(shù)組中某個(gè)key的集合
PHP 獲取二維數(shù)組中某個(gè)key的集合2014-06-06php利用反射實(shí)現(xiàn)插件機(jī)制的方法
這篇文章主要介紹了php利用反射實(shí)現(xiàn)插件機(jī)制的方法,涉及php反射機(jī)制與插件的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-03-03php天翼開放平臺(tái)短信發(fā)送接口實(shí)現(xiàn)方法
這篇文章主要介紹了php天翼開放平臺(tái)短信發(fā)送接口實(shí)現(xiàn)方法,是針對(duì)短信接口的經(jīng)典應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12php中session過期時(shí)間設(shè)置及session回收機(jī)制介紹
在網(wǎng)上可以找到修改配置文件中的session.gc_maxlifetime,如果想了解更多session回收機(jī)制,繼續(xù)閱讀2014-05-05php 301轉(zhuǎn)向?qū)崿F(xiàn)代碼
php對(duì)全站的所有內(nèi)頁(yè)進(jìn)行域名301轉(zhuǎn)向2008-09-09PHP動(dòng)態(tài)分頁(yè)函數(shù),PHP開發(fā)分頁(yè)必備啦
PHP動(dòng)態(tài)分頁(yè)函數(shù),PHP開發(fā)分頁(yè)必備啦。其實(shí)吧,這個(gè)是必用的,不說了,PHP動(dòng)態(tài)分頁(yè)函數(shù)還是不錯(cuò),比較簡(jiǎn)單吧2011-11-11