成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Nginx 是如何讓你的緩存延期的

silvertheo / 690人閱讀

摘要:所以總體上該響應(yīng)會(huì)被緩存兩小時(shí)。其次,這個(gè)算是一般的多層緩存固有的弊端緩存數(shù)據(jù)的最大過(guò)期時(shí)間,取決于各級(jí)緩存的總和。這種情況下,緩存只是作為一個(gè)臨時(shí)救急的方案使用,我們并不希望多緩存更多的時(shí)間。

當(dāng) Nginx 使用 proxy cache 的文件作為響應(yīng)時(shí),它會(huì)更新其中的一些內(nèi)容,比如 Date 響應(yīng)頭;但大部分響應(yīng)頭都不會(huì)得到更新,比如 Expires 和 Cache-Control。眾所周知,Cache-Control 可以通過(guò) max-age=xxx 或者 s-maxage=xxx 指令設(shè)置緩存的有效時(shí)間。跟 Expires 響應(yīng)頭不同,這一時(shí)間是相對(duì)的。假設(shè)上游服務(wù)器返回 Cache-Control: public; max-age=3600,那么 Nginx 會(huì)緩存該響應(yīng)一小時(shí)。如果在這一小時(shí)到期之前,Client 訪問(wèn)了 Nginx,它會(huì)獲取到同樣的 Cache-Control 響應(yīng)頭,因此會(huì)再緩存多一小時(shí)。所以總體上該響應(yīng)會(huì)被緩存兩小時(shí)。

這聽(tīng)起來(lái)很讓人驚訝。但仔細(xì)想想,其實(shí)也不算什么嚴(yán)重的問(wèn)題。首先,當(dāng)我們?cè)O(shè)置 max-age=3600 時(shí),大多數(shù)情況下并不要求其嚴(yán)格地在一小時(shí)后過(guò)期。其次,這個(gè)算是一般的多層緩存固有的弊端:緩存數(shù)據(jù)的最大過(guò)期時(shí)間,取決于各級(jí)緩存 TTL 的總和。如果想要避免,你可以選擇根據(jù)外層數(shù)據(jù)剩下的 TTL 設(shè)置當(dāng)前 TTL;或者提供主動(dòng) purge 的操作,從最內(nèi)層開(kāi)始逐層清理數(shù)據(jù)。

當(dāng)然,某些時(shí)候下,這一行為會(huì)帶來(lái)一些問(wèn)題。舉個(gè)例子,假設(shè)我們開(kāi)啟了 proxy_cache_use_stale,在上游服務(wù)器出問(wèn)題時(shí)使用過(guò)期的內(nèi)容代替正常的響應(yīng)。這種情況下,緩存只是作為一個(gè)臨時(shí)救急的方案使用,我們并不希望 Client 多緩存更多的時(shí)間。否則會(huì)有上游應(yīng)用的開(kāi)發(fā)者抱怨,為何上游服務(wù)器已經(jīng)正常了,用戶刷新頁(yè)面看到的還是舊數(shù)據(jù)。作為解決辦法,我們可以在 Nginx 的 header filter 階段,通過(guò) Lua 代碼或者 Nginx C module,把 Cache-Control: max-age=... 修改成 Cache-Control: no-cache。這么一來(lái),Client 會(huì)在使用緩存之前先驗(yàn)證下,如果 Nginx 返回 304 狀態(tài)碼,那么該緩存會(huì)被繼續(xù)使用;如果上游已經(jīng) OK 了且更新了響應(yīng),那么 Client 就會(huì)重新請(qǐng)求,避免使用過(guò)期的內(nèi)容。

這里需要強(qiáng)調(diào)下,no-cache 并非如字面上的意義表示不緩存,而是要求 Client 在使用該緩存之前,需要先驗(yàn)證下被緩存的內(nèi)容是否還是最新的。MDN 的說(shuō)法是:

Forces caches to submit the request to the origin server for validation before releasing a cached copy.

對(duì)應(yīng)的,RFC 7234 的說(shuō)法:

The "no-cache" request directive indicates that a cache MUST NOT use
a stored response to satisfy the request without successful
validation on the origin server.

如果要想讓 Client 不緩存響應(yīng)的內(nèi)容,按 MDN 上的說(shuō)法,需要用 Cache-Control: no-cache, no-store, must-revalidate(https://developer.mozilla.org...)。

仔細(xì)看了下 no-cache / no-store / must-revalidate 這三項(xiàng)指令的介紹,似乎 no-store 就能讓 Client 不用這個(gè)緩存,因?yàn)?no-store 要求:

The cache should not store anything about the client request or server response.

另外 must-revalidate 要求在使用過(guò)期緩存前驗(yàn)證下該內(nèi)容是否是最新的,而 no-cache 也是要求重新驗(yàn)證的,那為什么需要兩個(gè)都一起用呢?

Google 搜索把我?guī)У搅诉@個(gè) SO 問(wèn)答:https://stackoverflow.com/que...。這個(gè)回答里面解釋了為何不單單用 no-store:因?yàn)槌裘阎?IE6 瀏覽器在處理 no-store 時(shí)有 bug。但可惜的是,這個(gè)回答沒(méi)有給出這一論斷的證據(jù),比如 IE 的 bug report 之類。MDN 在給出 Cache-Control: no-cache, no-store, must-revalidate 這個(gè)例子的時(shí)候,也沒(méi)有提及更多的上下文。這很像沒(méi)有任何注釋的老代碼:我們不知道當(dāng)初為何這么寫(xiě),而把它刪掉似乎不會(huì)帶來(lái)什么問(wèn)題。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/40259.html

相關(guān)文章

  • 入職5個(gè)月延期轉(zhuǎn)正,每天加班到22點(diǎn),妹子直接被逼走了?這職場(chǎng)PUA聽(tīng)得我拳頭都硬了。。。

    摘要:入職半年之后,老板給他簽期權(quán)合同,簽完后,老板說(shuō)股份需要董事會(huì)簽字,先把合同收回去。且因?yàn)殚L(zhǎng)年加班,得了一身病。多次實(shí)驗(yàn)之后,實(shí)驗(yàn)者把狗籠打開(kāi),這時(shí)候蜂音器響了,狗狗不但不逃,反而倒地呻吟和顫抖,等待電擊的到來(lái)。 ...

    joyqi 評(píng)論0 收藏0
  • 教你用認(rèn)知和人性來(lái)做最棒程序員

    摘要:不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。 不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。最初我是想用借優(yōu)秀的產(chǎn)品經(jīng)理思維來(lái)做最棒程序員的這個(gè)標(biāo)題,但想想還是要有同理心,技術(shù)同學(xué)平時(shí)和產(chǎn)品同學(xué)已經(jīng)是相愛(ài)相殺了...

    Scliang 評(píng)論0 收藏0
  • 教你用認(rèn)知和人性來(lái)做最棒程序員

    摘要:不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。 不久前,在團(tuán)隊(duì)內(nèi)部和大家做了一次分享,內(nèi)容就是這次要講的用認(rèn)知和人性來(lái)提升自己的技術(shù)水平,大家反響不錯(cuò),所以這次整理一下也分享給大家。最初我是想用借優(yōu)秀的產(chǎn)品經(jīng)理思維來(lái)做最棒程序員的這個(gè)標(biāo)題,但想想還是要有同理心,技術(shù)同學(xué)平時(shí)和產(chǎn)品同學(xué)已經(jīng)是相愛(ài)相殺了...

    Kosmos 評(píng)論0 收藏0
  • 利用 NGINX 最大化 Python 性能,第二部分:負(fù)載均衡和監(jiān)控

    摘要:現(xiàn)有的服務(wù)器和應(yīng)用程序服務(wù)器相結(jié)合并在一個(gè)冒泡中運(yùn)行,無(wú)法直接接觸網(wǎng)絡(luò)流量,由反向代理服務(wù)器提出填鴨式請(qǐng)求。賦予高可用性讓你的反向代理服務(wù)器鏡像到在線備份,同時(shí)擁有備用的應(yīng)用程序服務(wù)器,讓你的站點(diǎn)高度可用。 【編者按】本文主要介紹 NGINX 的主要功能以及如何通過(guò) Nginx 優(yōu)化 Python 應(yīng)用性能。本文系國(guó)內(nèi) ITOM 管理平臺(tái) OneAPM 編譯呈現(xiàn)。 本文上一篇系: 利用...

    zhangrxiang 評(píng)論0 收藏0
  • 利用 NGINX 最大化 Python 性能,第二部分:負(fù)載均衡和監(jiān)控

    摘要:現(xiàn)有的服務(wù)器和應(yīng)用程序服務(wù)器相結(jié)合并在一個(gè)冒泡中運(yùn)行,無(wú)法直接接觸網(wǎng)絡(luò)流量,由反向代理服務(wù)器提出填鴨式請(qǐng)求。賦予高可用性讓你的反向代理服務(wù)器鏡像到在線備份,同時(shí)擁有備用的應(yīng)用程序服務(wù)器,讓你的站點(diǎn)高度可用。 【編者按】本文主要介紹 NGINX 的主要功能以及如何通過(guò) Nginx 優(yōu)化 Python 應(yīng)用性能。本文系國(guó)內(nèi) ITOM 管理平臺(tái) OneAPM 編譯呈現(xiàn)。 本文上一篇系: 利用...

    Snailclimb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<