PHP核心技術(shù)與技術(shù)實踐---緩存詳解

8.1.1 為什么使用緩存

???????? 1、NoSQL指的是Not only Sql? 而不是 No Sql,作為一種統(tǒng)稱,包括了k-v的數(shù)據(jù)庫和內(nèi)存管理

?????? 2、緩存的三個要素:命中率,緩存更新策略、緩存最大數(shù)據(jù)量

8.1.2??? 命中率

?????? 1、命中率是指請求緩存次數(shù)和返回正確次數(shù)的比例。(正相關(guān))

?????? 2、Query Cache:將SQL語句以及結(jié)果做HASH映射后保存在一定的內(nèi)存區(qū)域。

?????? 3、只有Select語句會被緩存

?????? 4、命中率hit = Qcache_queries_in_cache / Com_select

?????? 5、如果數(shù)據(jù)經(jīng)常更新,QueryCache就會失效,甚至造成負(fù)擔(dān)

8.1.3??? 緩存更新策略(以Query Cache為例)

?????? 1、FIFO先進(jìn)先出策略(MySql就是使用這種)

?????? 2、LFU策略:最少使用的元素會被清理

?????? 3、LRU策略:最近最少使用的元素被清理。

8.1.4??? 緩存最大數(shù)據(jù)量

?????? 1、緩存最大數(shù)據(jù)量對于像數(shù)據(jù)庫這種,則是由參數(shù)決定;對于基于內(nèi)存的k-v,則是由OS決定的。

?????? 2、超過緩存最大數(shù)據(jù)量一般會做如下處理:

[if !supportLists]l? [endif]停止緩存服務(wù),所有緩存數(shù)據(jù)被清空

[if !supportLists]l? [endif]拒絕寫入,不再對緩存進(jìn)行更新

[if !supportLists]l? [endif]根據(jù)緩存更新策略清除舊數(shù)據(jù)

[if !supportLists]l? [endif]在上一個方案的基礎(chǔ)上,對舊數(shù)據(jù)進(jìn)行備份

8.2.1??? 文件緩存機(jī)制

?????? 1、模板的作用之一就是把動態(tài)PHP代碼“編譯”成靜態(tài)的HTML代碼,思路:

[if !supportLists]a)??????[endif]判斷是否需要緩存

[if !supportLists]b)?????[endif]判斷是否存在對應(yīng)的靜態(tài)文件

[if !supportLists]c)??????[endif]判斷靜態(tài)文件是否過期

8.2.2??? 文件緩存開源產(chǎn)品Secache

8.3 Opcode緩存

?????? 1、一個PHP運行完,所有的變量都會被回收,這樣可以避免內(nèi)存泄漏,但同樣無法復(fù)用之前的數(shù)據(jù),因此Opcode就產(chǎn)生了。

?????? 2、php的語言引擎Zend執(zhí)行php代碼時候,會把代碼經(jīng)過分成Token,詞法分析過程轉(zhuǎn)成Opcode的過程。

8.3.1??? eAccelerato下載及使用

8.4 客戶端緩存

[if !supportLists]1.??????[endif]客戶端緩存規(guī)則

[if !supportLists]a)??????[endif]如果響應(yīng)頭告訴緩存器不要緩存,緩存器就不會緩存

[if !supportLists]b)?????[endif]如果請求信息帶有認(rèn)證或者安全加密的,相應(yīng)內(nèi)容不會緩存

[if !supportLists]c)??????[endif]如果回應(yīng)中不存在校驗器(ETag或者Last-Modified頭信息),緩存服務(wù)器會認(rèn)為缺乏直接更新度信息,內(nèi)容不緩存

[if !supportLists]2.??????[endif]HTTP協(xié)議中的緩存使用

[if !supportLists]a)??????[endif]三個標(biāo)識Last-Modified?? Expires???? ETag

[if !supportLists]?????????????????????????????????????i.?????????????[endif]Expires:過期時間,HTTP的日期時間是格林威治時間GMT,而不是本地時間

[if !supportLists]???????????????????????????????????ii.?????????????[endif]Cache-Control:響應(yīng)頭信息,通過這個屬性可以讓網(wǎng)站owner全面控制內(nèi)容

[if !supportLists]?????????????????????????????????iii.?????????????[endif]ETag:服務(wù)器生成的唯一標(biāo)識符,“被請求變量的實體標(biāo)志”,給URL的唯一標(biāo)記。

[if !supportLists]b)?????[endif]一些小竅門

[if !supportLists]?????????????????????????????????????i.?????????????[endif]不經(jīng)常改變圖片或者頁面 啟用緩存,使用Cache-Control:max-age屬性設(shè)置一個較長的過期時間。

[if !supportLists]???????????????????????????????????ii.?????????????[endif]定期更新的內(nèi)容設(shè)置一個緩存服務(wù)器可識別的max-age屬性或過期時間

[if !supportLists]?????????????????????????????????iii.?????????????[endif]盡量不使用POST,因為POST返回的內(nèi)容大部分緩存服務(wù)器不會緩存。

[if !supportLists]????????????????????????????????iv.?????????????[endif]不要在URL中加入對每個用戶的識別信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我得定義方式:sudo defaults write /Library/Preferences/SystemCon...
    wasw100閱讀 1,056評論 0 1
  • 已經(jīng)潛水好幾天了,一直想等自己準(zhǔn)備好了在說,可是每天看到貓友們那么有活力那么積極向上的時候心里又會有個聲音不...
    靈犀victory閱讀 270評論 5 3
  • 2018.1.19農(nóng)歷2017年12月3日 星期5 睛轉(zhuǎn)陰 1.扎根三年,堅持早起 YY頻道學(xué)習(xí)第073天。 2...
    _紫霞閱讀 127評論 0 0
  • let ScrW = UIScreen.main.bounds.size.width let ScrH = UIS...
    一世滄桑畫閱讀 253評論 0 0

友情鏈接更多精彩內(nèi)容