




已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
為大型網(wǎng)站提速-memcached緩存技術(shù)目錄一、memcache的介紹11、memcached基本概念12、基本原理13、與mysql比較2二、安裝2三、操作memcache軟件41、使用客戶端連接memcahe,42、設(shè)置數(shù)據(jù)7(1)添加數(shù)據(jù)7(2)修改數(shù)據(jù)7(3)設(shè)置數(shù)據(jù)83、獲取數(shù)據(jù)84、刪除數(shù)據(jù)85、其他指令96、狀態(tài)指令97、失效時(shí)間108、key與value的限制11四、使用php來(lái)操作memcache111 、安裝 memcache的擴(kuò)展,112、入門測(cè)試133、php數(shù)據(jù)類型探討存入memcache154、案例1,緩存sql語(yǔ)句的執(zhí)行結(jié)果175、案例2,緩存新聞詳情內(nèi)容,176、memcache在TP5框架中使用18五、分布式配置201、簡(jiǎn)介說(shuō)明202、具體搭建步驟使用21六、session 數(shù)據(jù)入memcache22七、其他問(wèn)題231、memcache里面適合存儲(chǔ)哪些數(shù)據(jù)。232、惰性刪除233、最近最少使用原則244、安全性的問(wèn)題245、緩存雪崩問(wèn)題24八、memcache在Linux環(huán)境下安裝241、安裝libevent軟件252、安裝memcache25一、memcache的介紹1、memcached基本概念(1)Memcached是danga的一個(gè)項(xiàng)目,最早是LiveJournal 服務(wù)的,最初為了加速 LiveJournal 訪問(wèn)速度而開(kāi)發(fā)的,后來(lái)被很多大型的網(wǎng)站采用。 官方網(wǎng)站: 和 /(2)Memcached是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),用于構(gòu)建大負(fù)載的網(wǎng)站,來(lái)分擔(dān)數(shù)據(jù)庫(kù)的壓力,簡(jiǎn)單的說(shuō)就是將頻繁訪問(wèn)的數(shù)據(jù)存儲(chǔ)到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。學(xué)習(xí)資源;/memcached/php-connect-memcached.html2、基本原理當(dāng)前客戶端首次訪問(wèn)熱點(diǎn)新聞時(shí),從數(shù)據(jù)庫(kù)里面取出,并把該熱點(diǎn)信息數(shù)據(jù)給給緩存到服務(wù)器的內(nèi)存里面,后續(xù)用戶訪問(wèn)時(shí),直接從內(nèi)存里面獲取數(shù)據(jù),返回即可。3、與mysql比較(1)與mysql一樣,是一個(gè)c(client)/s(server)架構(gòu)的軟件。(2)mysql里面的數(shù)據(jù),是存儲(chǔ)到硬盤里面的,memcache里面的數(shù)據(jù)是存儲(chǔ)到內(nèi)存里面的,服務(wù)器一旦斷電后重啟,則存儲(chǔ)到內(nèi)存里面的數(shù)據(jù)就丟失。(3)數(shù)據(jù)存儲(chǔ)到mysql里面,則需要先建立數(shù)據(jù)庫(kù),建立表,設(shè)計(jì)字段。在memcache里面數(shù)據(jù)的存儲(chǔ)形式是key,value方式,(鍵值對(duì)方式),可以理解成兩列的表。比如如下:name 小剛age 12email .二、安裝在window進(jìn)行安裝測(cè)試,通過(guò)memcached -h 查看安裝成服務(wù)的一些指令先下載軟件,拷貝到一個(gè)具體位置,一般是和環(huán)境軟件在一塊。(1)以管理員的方式,進(jìn)入cmd,并進(jìn)入到memcached軟件所在的目錄(2)執(zhí)行memcached d install進(jìn)行安裝。(3)安裝完成后,進(jìn)入啟動(dòng),windows下dos命令窗口輸入netstat -ano即可查看端口使用情況,如果要查看指定端口是否被占用可以使用命令netstat -ano|findstr 端口號(hào)。注意:也可以無(wú)需安裝,直接啟動(dòng)memcache軟件注意點(diǎn);三、操作memcache軟件1、使用客戶端連接memcahe,語(yǔ)法:telnet ip地址 端口號(hào)在cmd窗口里面,輸入 telnet ip地址 端口號(hào)有的同學(xué)電腦會(huì)提示“telnet不是內(nèi)部或外部指令”解決:安裝本電腦的telnet客戶端服務(wù)即可??刂泼姘?程序和功能-打開(kāi)或關(guān)閉windows服務(wù)-Telnet客戶端有的系統(tǒng)沒(méi)有windows服務(wù)的具體提示,那就不要使用dos窗口連接轉(zhuǎn)而使用SecureCRT通過(guò)telnet協(xié)議連接memcache按回車出現(xiàn)如下界面鏈接成功,2、設(shè)置數(shù)據(jù)(1)添加數(shù)據(jù)語(yǔ)法:add key 0|1 失效時(shí)間 數(shù)據(jù)長(zhǎng)度key :鍵的名稱0|1:是否壓縮,0表示不壓縮,1表示要壓縮,失效時(shí)間:緩存周期,單位是秒數(shù)據(jù)長(zhǎng)度:?jiǎn)挝皇亲止?jié),注意:使用add指令,添加數(shù)據(jù)時(shí),如果鍵已經(jīng)存在,則添加失敗(2)修改數(shù)據(jù)語(yǔ)法:replace key 0|1 失效時(shí)間 數(shù)據(jù)長(zhǎng)度注意:在修改時(shí),如果鍵不存在,則修改失敗。(3)設(shè)置數(shù)據(jù)語(yǔ)法:set key 0|1 失效時(shí)間 數(shù)據(jù)長(zhǎng)度使用set 操作,如果鍵已經(jīng)存在,則是修改,如果鍵沒(méi)有存在,則是添加。3、獲取數(shù)據(jù)語(yǔ)法:get 鍵名4、刪除數(shù)據(jù)刪除單個(gè)數(shù)據(jù)語(yǔ)法:delete key刪除所有數(shù)據(jù),(在實(shí)際工作中,要慎用)語(yǔ)法:flush_all5、其他指令incr :加法操作,相加指定的值,返回相加后的結(jié)果,語(yǔ)法:incr number 100decr :減法操作,減去指定的值,返回相減后的結(jié)果,語(yǔ)法:decr number 100可以使用該指令來(lái)模擬搶購(gòu),比如有1000件商品,在60秒完成搶購(gòu),set number 0 60 41000用戶搶購(gòu)一次,數(shù)值減一,當(dāng)減到0時(shí),搶購(gòu)結(jié)束。decr number 16、狀態(tài)指令語(yǔ)法命令:stats主要通過(guò)該命令來(lái)計(jì)算memcache的效率(命中率)命中率計(jì)算:get_hist/cmd_get 如果命中率非常低,則說(shuō)明memcache低效。需要調(diào)整緩存的數(shù)據(jù)。7、失效時(shí)間失效時(shí)間,有兩種設(shè)置方式:(1)時(shí)間間隔(秒數(shù))時(shí)間間隔 最大不能超過(guò)2592000秒(30天)。(2)失效的時(shí)間戳,大于當(dāng)前時(shí)間戳才有效。案例1:比如我們要設(shè)置一個(gè)緩存項(xiàng),想要緩存20天,應(yīng)該如何設(shè)置此時(shí),就有兩種方式,來(lái)進(jìn)行設(shè)置第一種方式,使用時(shí)間間隔 20*24*3600第二種方式:使用時(shí)間戳 time()+20*24*3600案例2:比如我們要設(shè)置一個(gè)緩存項(xiàng),想要緩存40天,應(yīng)該如何設(shè)置此時(shí)就只有一種方式,使用到期的時(shí)間戳。time()+40*24*3600注意:時(shí)間間隔與時(shí)間戳都是整數(shù),如何來(lái)區(qū)別呢?如果整數(shù)小于2592000,則是時(shí)間間隔如果要使用時(shí)間戳,則必須大于當(dāng)前的時(shí)間戳。8、key與value的限制設(shè)置key的長(zhǎng)度不要超過(guò)250個(gè)字節(jié)。value的大小不要超過(guò)1MB的數(shù)據(jù)。select * from news limit 50 = 二維數(shù)組 四、使用php來(lái)操作memcache1 、安裝 memcache的擴(kuò)展,(1)準(zhǔn)備擴(kuò)展文件,注意: 擴(kuò)展文件要和php的版本相對(duì)應(yīng)。通過(guò)phpinfo()函數(shù)查看php的版本。(2)把對(duì)應(yīng)的擴(kuò)展文件,拷貝到php的安裝目錄的ext目錄里面。(3)打開(kāi)php.ini配置文件,進(jìn)行配置加載memcache的擴(kuò)展。(4)重啟apache,通過(guò)phpinfo 函數(shù)進(jìn)行測(cè)試,如果出現(xiàn)如下提示,則證明已經(jīng)安裝成功。2、入門測(cè)試在php的手冊(cè)里面,給我們提供了一個(gè)memcache的類,使用該類的一些方法完成操作。獲取數(shù)據(jù)注意點(diǎn);在使用memache類操作時(shí),里面的方法有些是和命令是不一樣的。比如$res = $mem-getStats(); $rem-increment();3、php數(shù)據(jù)類型探討存入memcachephp數(shù)據(jù)類型有標(biāo)量和非標(biāo)量標(biāo)量:整型 小數(shù)型 字符串 布爾非標(biāo)量:數(shù)組 資源 對(duì)象 null(1)標(biāo)量數(shù)據(jù),存儲(chǔ)到memcache里面,獲取值的代碼說(shuō)明:如果是標(biāo)量數(shù)據(jù)存儲(chǔ)到memcache里面,則取出數(shù)據(jù)時(shí),保持原樣類型。(2)非標(biāo)量數(shù)據(jù),存儲(chǔ)到memcache里面,獲取數(shù)據(jù)非標(biāo)量數(shù)據(jù):序列化后再存入到memcached服務(wù)器中,得到時(shí)反序列化工作。序列化與反序列化過(guò)程,是由memcache的擴(kuò)展完成的,無(wú)需我們自己干預(yù)。什么是序列化:就是在保存數(shù)據(jù)時(shí),不但保存數(shù)據(jù)本身,還保存數(shù)據(jù)類型。 a.利于在網(wǎng)絡(luò)間進(jìn)行數(shù)據(jù)傳輸 b.便于重新讀取并恢復(fù)數(shù)據(jù) Memcached本身沒(méi)有數(shù)據(jù)類型之分(內(nèi)部都是以字符串的形式處理的)但是,php是存在數(shù)據(jù)類型。總結(jié):除了資源類型之外,其他的類型我們都可以存儲(chǔ),當(dāng)然一般是存儲(chǔ)字符串和數(shù)組。4、案例1,緩存sql語(yǔ)句的執(zhí)行結(jié)果5、案例2,緩存新聞詳情內(nèi)容,(1)完成新聞列表(2)新聞詳情頁(yè)面,緩存到memcache里面。6、memcache在TP5框架中使用ThinkPHP采用thinkCache類提供緩存功能支持。在config配置文件中,進(jìn)行如下配置;支持的緩存類型包括file、memcache、wincache、sqlite、redis和xcache。設(shè)置緩存;Cache:set(name,$value,3600); 如果設(shè)置成功返回true,否則返回false。緩存自增/減針對(duì)數(shù)值類型的緩存數(shù)據(jù),可以使用自增操作,例如:/ name自增(步進(jìn)值為1)Cache:inc(name)/ Cache:dec(name);/ name自增(步進(jìn)值為3)Cache:inc(name,3)/ Cache:dec(name,3);獲取緩存dump(Cache:get(name);刪除緩存Cache:rm(name); 獲取并刪除緩存Cache:pull(name); 如果name值不存在,則返回null。清空緩存Cache:clear(); 獲取的鍵不存在則把匿名函數(shù)的運(yùn)行結(jié)果寫(xiě)入緩存數(shù)據(jù)并返回緩存的數(shù)據(jù)。Cache:remember(name,function() return time(););五、分布式配置1、簡(jiǎn)介說(shuō)明Memcached是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng)每臺(tái)服務(wù)器寫(xiě)、讀操作都有把對(duì)memcache的許多操作平均地給各個(gè)分支服務(wù)器完成memcache可使用的內(nèi)存空間是多個(gè)服務(wù)器空間的“算術(shù)和”原理圖:php無(wú)需關(guān)心具體操作是那個(gè)memcache服務(wù)器,在memcache內(nèi)部有具體算法,幫助php實(shí)現(xiàn)具體分發(fā)(操作的memcache)2、具體搭建步驟使用分布式的多個(gè)memcache服務(wù)搭建: 在一臺(tái)服務(wù)器里邊開(kāi)啟多個(gè)memcache服務(wù) 給多臺(tái)服務(wù)器分別安裝memcache服務(wù)環(huán)境搭建:至少需要兩臺(tái)memcache服務(wù)器,第一臺(tái):localhost 11211端口的 第二臺(tái):localhost 8888;設(shè)置數(shù)據(jù)代碼:獲取數(shù)據(jù)需要注意:存儲(chǔ)和獲取數(shù)據(jù)時(shí),根據(jù)一個(gè)算法,來(lái)計(jì)算存儲(chǔ)到哪臺(tái)服務(wù)器,或從哪臺(tái)服務(wù)器取出數(shù)據(jù)。默認(rèn)使用取模算法,在存儲(chǔ)數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)的鍵,轉(zhuǎn)換成數(shù)字和memcache服務(wù)器的個(gè)數(shù)取模,取模的結(jié)果,就決定向哪臺(tái)服務(wù)器存儲(chǔ)。在取出數(shù)據(jù)時(shí),也是根據(jù)鍵,轉(zhuǎn)換成數(shù)字,和memcache服務(wù)器的個(gè)數(shù)取模,取模的結(jié)果,就決定向哪臺(tái)服務(wù)器獲取數(shù)據(jù)。六、session 數(shù)據(jù)入memcache需要在php.ini文件里面進(jìn)行配置,session數(shù)據(jù)入memcache.(1)session.save_handler 配置session的存儲(chǔ)方式。(2)session.save_path指定session的存儲(chǔ)位置,我們可以使用一個(gè)函數(shù)ini_set(),完成php.ini里面的一些配置,該配置只能在當(dāng)前頁(yè)面有效。ini_set(session.save_handler,memcache); ini_get()ini_set(session.save_path,tcp:/localhost:11210);存儲(chǔ)數(shù)據(jù)的代碼:獲取數(shù)據(jù)的代碼:注意:把session數(shù)據(jù)存儲(chǔ)到memcache里面,是以session_id為鍵的。七、其他問(wèn)題1、memcache里面適合存儲(chǔ)哪些數(shù)據(jù)。(1)訪問(wèn)比較頻繁的數(shù)據(jù),安全性差的數(shù)據(jù),丟失無(wú)所謂的數(shù)據(jù)。(2)數(shù)據(jù)更新,比較頻繁的數(shù)據(jù),比如用戶的在線狀態(tài)。(3)數(shù)據(jù)的單個(gè)鍵值不能太大,不要超過(guò)1Mb數(shù)據(jù)。2、惰性刪除Lazy Expiration memcached內(nèi)部不會(huì)監(jiān)視記錄是否過(guò)期,而是在get時(shí)查看記錄的時(shí)間戳,檢查記錄是否過(guò)期。這種技術(shù)被稱為lazy(惰性)expiration。因此,memcached不會(huì)在過(guò)期監(jiān)視上耗費(fèi)CPU時(shí)間 3、最近最少使用原則LRU,least Recently Used,最近最少使用原則。memcache在插入新數(shù)據(jù)時(shí),如果空間不足時(shí),采用刪除舊緩存項(xiàng)策略,刪除最不活躍的緩存項(xiàng)。4、安全性的問(wèn)題在memcache里面,沒(méi)有設(shè)置安全認(rèn)證機(jī)制,因?yàn)閙emache就是專做緩存使用,主要突出緩存優(yōu)勢(shì)。一般情況下,memcache服務(wù)器是在內(nèi)網(wǎng)中的,不會(huì)暴露在公網(wǎng)中,因此一些惡意用戶就無(wú)法操作memcache服務(wù)器。-l 連接的IP地址, 默認(rèn)是本機(jī) 5、緩存雪崩問(wèn)題如果在設(shè)置緩存周期時(shí),設(shè)置的緩存周期都一樣,當(dāng)正好趕上高并發(fā)時(shí),如果緩存都同時(shí)失效,則會(huì)把請(qǐng)求涌向mysql服務(wù)器,mysql服務(wù)器有可能會(huì)出現(xiàn)宕機(jī)現(xiàn)象,解決方案,設(shè)置不同的緩存周期。八、memcache在Linux環(huán)境下安裝Linux系統(tǒng)安裝memcached,首先要先安裝libevent庫(kù)。yum install libevent libevent-devel 注:因?yàn)閙emcached依賴于libevent庫(kù),因此,需要先編譯libevent編譯Memcached時(shí),要指定Libevent1、安裝libevent軟件(1)下載libevent軟件,上傳到l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車檢測(cè)設(shè)備項(xiàng)目可行性分析報(bào)告(模板參考范文)
- 推廣團(tuán)隊(duì)元謀活動(dòng)方案
- 教師開(kāi)學(xué)律動(dòng)活動(dòng)方案
- 排球集體活動(dòng)方案
- 抗洪演練社區(qū)活動(dòng)方案
- 招行積分游戲活動(dòng)方案
- LNCRNAs在PFOS誘導(dǎo)星形膠質(zhì)細(xì)胞異常增殖中的分子機(jī)制研究
- 核心素養(yǎng)視域下的初中數(shù)學(xué)大單元教學(xué)設(shè)計(jì)研究-以“勾股定理”為例
- 教育實(shí)習(xí)活動(dòng)方案
- 基于地聚物內(nèi)源鋁脫除的碳捕集材料設(shè)計(jì)、制備及其吸附機(jī)理研究
- 2025年高考化學(xué)總復(fù)習(xí)試題分類訓(xùn)練:硫及其化合物(解析卷)
- 2023-2024學(xué)年廣東省深圳市龍華區(qū)八年級(jí)(下)期末英語(yǔ)試卷
- 濕疹護(hù)理課件教學(xué)課件
- 相關(guān)方需求和期望表
- 胃腸內(nèi)鏡護(hù)士進(jìn)修匯報(bào)
- 23J916-1 住宅排氣道(一)
- 生物基復(fù)合材料的LCA(生命周期評(píng)估)
- 【核心素養(yǎng)目標(biāo)】人教版物理九年級(jí) 13.1分子熱運(yùn)動(dòng) 教案
- 第四課 拗音 課件初中日語(yǔ)人教版七年級(jí)第一冊(cè)
- 廣東省廣州市天河區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末物理模擬試卷
- 甲乙方施工合同范本
評(píng)論
0/150
提交評(píng)論