3-memcache8-Nosql1130_第1頁
3-memcache8-Nosql1130_第2頁
3-memcache8-Nosql1130_第3頁
3-memcache8-Nosql1130_第4頁
3-memcache8-Nosql1130_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

為大型網(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來操作memcache111 、安裝 memcache的擴(kuò)展,112、入門測試133、php數(shù)據(jù)類型探討存入memcache154、案例1,緩存sql語句的執(zhí)行結(jié)果175、案例2,緩存新聞詳情內(nèi)容,176、memcache在TP5框架中使用18五、分布式配置201、簡介說明202、具體搭建步驟使用21六、session 數(shù)據(jù)入memcache22七、其他問題231、memcache里面適合存儲(chǔ)哪些數(shù)據(jù)。232、惰性刪除233、最近最少使用原則244、安全性的問題245、緩存雪崩問題24八、memcache在Linux環(huán)境下安裝241、安裝libevent軟件252、安裝memcache25一、memcache的介紹1、memcached基本概念(1)Memcached是danga的一個(gè)項(xiàng)目,最早是LiveJournal 服務(wù)的,最初為了加速 LiveJournal 訪問速度而開發(fā)的,后來被很多大型的網(wǎng)站采用。 官方網(wǎng)站: 和 /(2)Memcached是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),用于構(gòu)建大負(fù)載的網(wǎng)站,來分擔(dān)數(shù)據(jù)庫的壓力,簡單的說就是將頻繁訪問的數(shù)據(jù)存儲(chǔ)到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。學(xué)習(xí)資源;/memcached/php-connect-memcached.html2、基本原理當(dāng)前客戶端首次訪問熱點(diǎn)新聞時(shí),從數(shù)據(jù)庫里面取出,并把該熱點(diǎn)信息數(shù)據(jù)給給緩存到服務(wù)器的內(nèi)存里面,后續(xù)用戶訪問時(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ù)庫,建立表,設(shè)計(jì)字段。在memcache里面數(shù)據(jù)的存儲(chǔ)形式是key,value方式,(鍵值對(duì)方式),可以理解成兩列的表。比如如下:name 小剛age 12email .二、安裝在window進(jìn)行安裝測試,通過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)。注意:也可以無需安裝,直接啟動(dòng)memcache軟件注意點(diǎn);三、操作memcache軟件1、使用客戶端連接memcahe,語法:telnet ip地址 端口號(hào)在cmd窗口里面,輸入 telnet ip地址 端口號(hào)有的同學(xué)電腦會(huì)提示“telnet不是內(nèi)部或外部指令”解決:安裝本電腦的telnet客戶端服務(wù)即可??刂泼姘?程序和功能-打開或關(guān)閉windows服務(wù)-Telnet客戶端有的系統(tǒng)沒有windows服務(wù)的具體提示,那就不要使用dos窗口連接轉(zhuǎn)而使用SecureCRT通過telnet協(xié)議連接memcache按回車出現(xiàn)如下界面鏈接成功,2、設(shè)置數(shù)據(jù)(1)添加數(shù)據(jù)語法:add key 0|1 失效時(shí)間 數(shù)據(jù)長度key :鍵的名稱0|1:是否壓縮,0表示不壓縮,1表示要壓縮,失效時(shí)間:緩存周期,單位是秒數(shù)據(jù)長度:單位是字節(jié),注意:使用add指令,添加數(shù)據(jù)時(shí),如果鍵已經(jīng)存在,則添加失?。?)修改數(shù)據(jù)語法:replace key 0|1 失效時(shí)間 數(shù)據(jù)長度注意:在修改時(shí),如果鍵不存在,則修改失敗。(3)設(shè)置數(shù)據(jù)語法:set key 0|1 失效時(shí)間 數(shù)據(jù)長度使用set 操作,如果鍵已經(jīng)存在,則是修改,如果鍵沒有存在,則是添加。3、獲取數(shù)據(jù)語法:get 鍵名4、刪除數(shù)據(jù)刪除單個(gè)數(shù)據(jù)語法:delete key刪除所有數(shù)據(jù),(在實(shí)際工作中,要慎用)語法:flush_all5、其他指令incr :加法操作,相加指定的值,返回相加后的結(jié)果,語法:incr number 100decr :減法操作,減去指定的值,返回相減后的結(jié)果,語法:decr number 100可以使用該指令來模擬搶購,比如有1000件商品,在60秒完成搶購,set number 0 60 41000用戶搶購一次,數(shù)值減一,當(dāng)減到0時(shí),搶購結(jié)束。decr number 16、狀態(tài)指令語法命令:stats主要通過該命令來計(jì)算memcache的效率(命中率)命中率計(jì)算:get_hist/cmd_get 如果命中率非常低,則說明memcache低效。需要調(diào)整緩存的數(shù)據(jù)。7、失效時(shí)間失效時(shí)間,有兩種設(shè)置方式:(1)時(shí)間間隔(秒數(shù))時(shí)間間隔 最大不能超過2592000秒(30天)。(2)失效的時(shí)間戳,大于當(dāng)前時(shí)間戳才有效。案例1:比如我們要設(shè)置一個(gè)緩存項(xiàng),想要緩存20天,應(yīng)該如何設(shè)置此時(shí),就有兩種方式,來進(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ù),如何來區(qū)別呢?如果整數(shù)小于2592000,則是時(shí)間間隔如果要使用時(shí)間戳,則必須大于當(dāng)前的時(shí)間戳。8、key與value的限制設(shè)置key的長度不要超過250個(gè)字節(jié)。value的大小不要超過1MB的數(shù)據(jù)。select * from news limit 50 = 二維數(shù)組 四、使用php來操作memcache1 、安裝 memcache的擴(kuò)展,(1)準(zhǔn)備擴(kuò)展文件,注意: 擴(kuò)展文件要和php的版本相對(duì)應(yīng)。通過phpinfo()函數(shù)查看php的版本。(2)把對(duì)應(yīng)的擴(kuò)展文件,拷貝到php的安裝目錄的ext目錄里面。(3)打開php.ini配置文件,進(jìn)行配置加載memcache的擴(kuò)展。(4)重啟apache,通過phpinfo 函數(shù)進(jìn)行測試,如果出現(xiàn)如下提示,則證明已經(jīng)安裝成功。2、入門測試在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里面,獲取值的代碼說明:如果是標(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í)反序列化工作。序列化與反序列化過程,是由memcache的擴(kuò)展完成的,無需我們自己干預(yù)。什么是序列化:就是在保存數(shù)據(jù)時(shí),不但保存數(shù)據(jù)本身,還保存數(shù)據(jù)類型。 a.利于在網(wǎng)絡(luò)間進(jìn)行數(shù)據(jù)傳輸 b.便于重新讀取并恢復(fù)數(shù)據(jù) Memcached本身沒有數(shù)據(jù)類型之分(內(nèi)部都是以字符串的形式處理的)但是,php是存在數(shù)據(jù)類型。總結(jié):除了資源類型之外,其他的類型我們都可以存儲(chǔ),當(dāng)然一般是存儲(chǔ)字符串和數(shù)組。4、案例1,緩存sql語句的執(zhí)行結(jié)果5、案例2,緩存新聞詳情內(nèi)容,(1)完成新聞列表(2)新聞詳情頁面,緩存到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é)果寫入緩存數(shù)據(jù)并返回緩存的數(shù)據(jù)。Cache:remember(name,function() return time(););五、分布式配置1、簡介說明Memcached是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng)每臺(tái)服務(wù)器寫、讀操作都有把對(duì)memcache的許多操作平均地給各個(gè)分支服務(wù)器完成memcache可使用的內(nèi)存空間是多個(gè)服務(wù)器空間的“算術(shù)和”原理圖:php無需關(guān)心具體操作是那個(gè)memcache服務(wù)器,在memcache內(nèi)部有具體算法,幫助php實(shí)現(xiàn)具體分發(fā)(操作的memcache)2、具體搭建步驟使用分布式的多個(gè)memcache服務(wù)搭建: 在一臺(tái)服務(wù)器里邊開啟多個(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è)算法,來計(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)前頁面有效。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為鍵的。七、其他問題1、memcache里面適合存儲(chǔ)哪些數(shù)據(jù)。(1)訪問比較頻繁的數(shù)據(jù),安全性差的數(shù)據(jù),丟失無所謂的數(shù)據(jù)。(2)數(shù)據(jù)更新,比較頻繁的數(shù)據(jù),比如用戶的在線狀態(tài)。(3)數(shù)據(jù)的單個(gè)鍵值不能太大,不要超過1Mb數(shù)據(jù)。2、惰性刪除Lazy Expiration memcached內(nèi)部不會(huì)監(jiān)視記錄是否過期,而是在get時(shí)查看記錄的時(shí)間戳,檢查記錄是否過期。這種技術(shù)被稱為lazy(惰性)expiration。因此,memcached不會(huì)在過期監(jiān)視上耗費(fèi)CPU時(shí)間 3、最近最少使用原則LRU,least Recently Used,最近最少使用原則。memcache在插入新數(shù)據(jù)時(shí),如果空間不足時(shí),采用刪除舊緩存項(xiàng)策略,刪除最不活躍的緩存項(xiàng)。4、安全性的問題在memcache里面,沒有設(shè)置安全認(rèn)證機(jī)制,因?yàn)閙emache就是專做緩存使用,主要突出緩存優(yōu)勢。一般情況下,memcache服務(wù)器是在內(nèi)網(wǎng)中的,不會(huì)暴露在公網(wǎng)中,因此一些惡意用戶就無法操作memcache服務(wù)器。-l 連接的IP地址, 默認(rèn)是本機(jī) 5、緩存雪崩問題如果在設(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庫。yum install libevent libevent-devel 注:因?yàn)閙emcached依賴于libevent庫,因此,需要先編譯libevent編譯Memcached時(shí),要指定Libevent1、安裝libevent軟件(1)下載libevent軟件,上傳到l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論