⑴ 什麼是網站緩存就是產生html頁面嗎
轉自:http://www.fovweb.com
這是一篇知識性的文檔,主要目的是為了讓Web緩存相關概念更容易被開發者理解並應用於實際的應用環境中。為了簡要起見,某些實現方面的細節被簡化或省略了。如果你更關心細節實現則完全不必耐心看完本文,後面參考文檔和更多深入閱讀部分可能是你更需要的內容。
什麼是Web緩存,為什麼要使用它?
緩存的類型:
瀏覽器緩存;
代理伺服器緩存;
Web緩存無害嗎?為什麼要鼓勵緩存?
Web緩存如何工作:
如何控制(控制不)緩存:
HTML Meta標簽 vs. HTTP頭信息;
Pragma HTTP頭信息(為什麼不起作用);
使用Expires(過期時間)HTTP頭信息控制保鮮期;
Cache-Control(緩存控制) HTTP頭信息;
校驗參數和校驗;
創建利於緩存網站的竅門;
編寫利於緩存的腳本;
常見問題解答;
緩存機制的實現:Web伺服器端配置;
緩存機制的實現:伺服器端腳本;
參考文檔和深入閱讀;
關於本文檔;
什麼是Web緩存,為什麼要使用它?Web緩存位於Web伺服器之間(1個或多個,內容源伺服器)和客戶端之間(1個或多個):緩存會根據進來的請求保存輸出內容的副本,例如html頁面, 圖片,文件(統稱為副本),然後,當下一個請求來到的時候:如果是相同的URL,緩存直接使用副本響應訪問請求,而不是向源伺服器再次發送請求。
使用緩存主要有2大理由:
減少相應延遲:因為請求從緩存伺服器(離客戶端更近)而不是源伺服器被相應,這個過程耗時更少,讓web伺服器看上去相應更快;
減少網路帶寬消耗:當副本被重用時會減低客戶端的帶寬消耗;客戶可以節省帶寬費用,控制帶寬的需求的增長並更易於管理。
緩存的類型瀏覽器緩存對於新一代的Web瀏覽器來說(例如:IE,Firefox):一般都能在設置對話框中發現關於緩存的設置,通過在你的電腦上僻處一塊硬碟空間用於存儲你已經看過的網站的副本。瀏覽器緩存根據非常簡單的規則進行工作:在同一個會話過程中(在當前瀏覽器沒有被關閉之前)會檢查一次並確定緩存的副本足夠新。這個緩存對於用戶點擊「後退」或者點擊剛訪問過的鏈接特別有用,如果你瀏覽過程中訪問到同一個圖片,這些圖片可以從瀏覽器緩存中調出而即時顯現。
代理伺服器緩存Web代理伺服器使用同樣的緩存原理,只是規模更大。代理伺服器群為成百上千用戶服務使用同樣的機制;大公司和ISP經常在他們的防火牆上架設代理緩存或者單獨的緩存設備;
由於帶路伺服器緩存並非客戶端或者源伺服器的一部分,而是位於原網路之外,請求必須路由到他們才能起作用。一個方法是手工設置你的瀏覽器:告訴瀏覽器使用那個代理,另外一個是通過中間伺服器:這個中間伺服器處理所有的web請求,並將請求轉發到後台網路,而用戶不必配置代理,甚至不必知道代理的存在;
代理伺服器緩存:是一個共享緩存,不只為一個用戶服務,經常為大量用戶使用,因此在減少相應時間和帶寬使用方面很有效:因為同一個副本會被重用多次。
網關緩存也被稱為反向代理緩存或間接代理緩存,網關緩存也是一個中間伺服器,和內網管理員部署緩存用於節省帶寬不同:網關緩存一般是網站管理員自己部署:讓他們的網站更容易擴展並獲得更好的性能;
請求有幾種方法被路由到網關緩存伺服器上:其中典型的是讓用一台或多台負載均衡伺服器從客戶端看上去是源伺服器;
⑵ 網站緩存加速伺服器用哪個
aiCache以客戶需求為核心,聚焦客戶關注的挑戰和壓力,依託引領世界時代潮流的互聯網技術,持續為客戶創造最 大價值。
基於cache技術的解決方案可使網站加速100至1000倍,可節省伺服器4倍以上,aiCache解決方案保證每個用戶的應用實現安全、高速和高可用,幫助企業獲得最大投資回報。不是很清楚你說的緩存加速設備具體是什麼設備,如果是web緩存加速的原理,一般主要指的是將web內容暫存下來,其他人再去訪問的時候,無需要從源站獲取了,提高了用戶相應的速度,節省了伺服器消耗資源等。目前流行的緩存加速的軟體有Fikker緩存加速伺服器軟體,CDN內容分發網路等。
⑶ 瀏覽器緩存和伺服器緩存
一、瀏覽器緩存
瀏覽器緩存即http緩存;瀏覽器緩存根據是否需要向伺服器重新發起HTTP請求將緩存過程分為兩個部分,分別是 強制緩存 和 協商緩存 。
瀏覽器第一次請求資源的時候伺服器會告訴客戶端是否應該緩存資源,根據響應報文中HTTP頭的緩存標識,決定是否緩存結果,是則將請求結果和緩存標識存入瀏覽器緩存中。如下圖:
1.強制緩存 :瀏覽器會對緩存進行查找,並根據一定的規則確定是否使用緩存。
強制緩存的緩存規則?
HTTP/1.0 Expires 這個欄位是絕對時間,比如2018年6月30日12:30,然後在這個時間點之前的請求都會使用瀏覽器緩存,除非清除了緩存。
這個欄位的缺點就是只會同步客戶端的時間,這就有可能修改客戶端時間導致緩存失效。
HTTP/1.1 cache-Control 這個是1.1的時候替換Expires的,它會有幾種取值:
public :所有內容都將被緩存(客戶端和代理伺服器都可緩存)
private :所有內容只有客戶端可以緩存, Cache-Control的默認取值
no-cache :客戶端緩存內容,但是是否使用緩存則需要經過協商緩存來驗證決定
no-store :所有內容都不會被緩存,即不使用強制緩存,也不使用協商緩存
max-age=xxx (xxx is numeric) :緩存內容將在xxx秒後失效
比如max-age=500,則在500秒內再次請求會直接只用緩存。
優先性:cache-Control > Expires
如果同時存在,cache-Control會覆蓋Expires。
這個欄位的缺點就是:
如果資源更新的速度是秒以下單位,那麼該緩存是不能被使用的,因為它的時間單位最低是秒。
如果文件是通過伺服器動態生成的,那麼該方法的更新時間永遠是生成的時間,盡管文件可能沒有變化,所以起不到緩存的作用。
上圖中瀏覽器緩存中存在該資源的緩存結果,並且沒有失效,就會直接使用緩存的內容。
上圖中瀏覽器緩存中沒有該資源的緩存結果和標識,就會直接向伺服器發起HTTP請求。
2.協商緩存: 瀏覽器的強制緩存失效後(時間過期),瀏覽器攜帶緩存標識請求伺服器,由伺服器決定是否使用緩存。
伺服器決定的規則?
控制協商緩存的欄位有 Last-Modified / If-Modified-Since 和 Etag / If-None-Match。
①Last-Modified 是伺服器返回給瀏覽器的本資源的最後修改時間。
當下次再次請求的時候,瀏覽器會在請求頭中帶 If-Modified-Since ,即上次請求下來的 Last-Modified 的值,
然後伺服器會用這個值和該資源最後修改的時間比較,如果最後修改時間大於這個值,則會重新請求該資源,返回狀態碼200。
如果這個值和最後修改時間相等,則會返回304,告訴瀏覽器繼續使用緩存。
② Etag 是伺服器返回的一個hash值。
當下次再次請求的時候,瀏覽器會在請求頭中帶 If-None-Match ,即上次請求下來的 Etag 值,
然後伺服器會用這個值和該資源在伺服器的 Etag 值比較,如果一致則會返回304,繼續使用緩存;如果不一致,則會重新請求,返回200。
二、伺服器緩存
上面是一個簡單的流程圖:
用戶1訪問A頁面,伺服器解析A頁面返回給用戶1,同時在伺服器內存上做一定映射,把A頁面緩存在硬碟上面
用戶2訪問A頁面,伺服器直接根據內存上的映射找到對應的頁面緩存,直接返回給用戶2,這樣就減少了伺服器對同一頁面的重復解析
伺服器緩存和瀏覽器緩存的區別:
伺服器緩存是把頁面緩存到伺服器上的硬碟里,而瀏覽器緩存是把頁面緩存到用戶自己的電腦里
Nginx伺服器
Nginx是一個高性能的HTTP和反向代理伺服器。具有非常多的優越性:
在連接高並發的情況下,Nginx是Apache伺服器不錯的替代品,Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平台之一。
Nginx提供了expires、etag、if-modified-since指令來實現瀏覽器緩存控制。
nginx -s reload#重新載入配置文件
nginx -s reopen#重新打開log文件
nginx -s stop#快速關閉nginx服務
nginx -s quit #優雅的關閉nginx服務,等待工作進程處理完所有的請求
Nginx設置靜態文件的緩存過期時間
location ~.*\.(js|css|html|png|jpg)$ {
expires 3d;
}
expires 3d;//表示緩存3天
expires 3h;//表示緩存3小時
expires max;//表示緩存10年
expires -1;//表示永遠過期。
如果設置為-1在js、css等靜態文件在沒有修改的情況下返回的是http 304,如果修改返回http 200
對於靜態資源會自動添加ETag,可以通過添加etag off指令禁止生成ETag。如果是靜態文件,那麼Last-Modified值為文件的最後修改時間。
在開發調試web的時候,經常會碰到因瀏覽器緩存(cache)而經常要去清空緩存或者強制刷新來測試的煩惱,提供下apache不緩存配置和nginx不緩存配置的設置。在常用的緩存設置裡面有兩種方式,都是使用add_header來設置:分別為Cache-Control和Pragma。
location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;
add_header Pragma no-cache;
}
nginx gzip壓縮
使用 gzip 壓縮可以降低網站帶寬消耗,同時提升訪問速度。
主要在nginx服務端將頁面進行壓縮,然後在瀏覽器端進行解壓和解析,
目前大多數流行的瀏覽器都遲滯gzip格式的壓縮,所以不用擔心。
默認情況下,Nginx的gzip壓縮是關閉的,同時,Nginx默認只對text/html進行壓縮
gzip on;
ersio #開啟gzip壓縮輸出
gzip_http_vn 1.0 ;#默認1.1
#其中的gzip_http_version的設置,它的默認值是1.1,就是說對HTTP/1.1協議的請求才會進行gzip壓縮
#如果我們使用了proxy_pass進行反向代理,那麼nginx和後端的upstream server之間是用HTTP/1.0協議通信的。
gzip_vary on ;
#和http頭有關系,加個vary頭,給代理伺服器用的,有的瀏覽器支持壓縮,有的不支持,
#所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮
gzip_comp_level 6;
#設置gzip壓縮等級,等級越底壓縮速度越快文件壓縮比越小,反之速度越慢文件壓縮比越大 1-9
gzip_proxied any;
#Ngnix作為反向代理的時候啟用
#expample:gzip_proxied no-cache;
# off – 關閉所有的代理結果數據壓縮
# expired – 啟用壓縮,如果header中包含」Expires」頭信息
# no-cache – 啟用壓縮,如果header中包含」Cache-Control:no-cache」頭信息
# no-store – 啟用壓縮,如果header中包含」Cache-Control:no-store」頭信息
# private – 啟用壓縮,如果header中包含」Cache-Control:private」頭信息
# no_last_modified – 啟用壓縮,如果header中包含」Last_Modified」頭信息
# no_etag – 啟用壓縮,如果header中包含「ETag」頭信息
# auth – 啟用壓縮,如果header中包含「Authorization」頭信息
# any – 無條件壓縮所有結果數據
gzip_types text/html ;#壓縮的文件類型
#設置需要壓縮的MIME類型,非設置值不進行壓縮
#param:text/html|application/x-javascript|text/css|application/xml
gzip_buffers 16 8k; #設置gzip申請內存的大小,其作用是按塊大小的倍數申請內存空間設置gzip申請內存的大小,其作用是按塊大小的倍數申請內存空間
#設置gzip申請內存的大小,其作用是按塊大小的倍數申請內存空間
# param1:int 增加的倍數
# param2:int(k) 後面單位是k
# example: gzip_buffers 4 8k;
# Disable gzip for certain browsers.
gzip_disable 「MSIE [1-6].(?!.*SV1)」; #ie6不支持gzip,需要禁用掉ie6
⑷ Redis 都有哪些應用場景
緩存:這應該是 Redis 最主要的功能了,也是大型網站必備機制,合理地使用緩存不僅可以加 快數據的訪問速度,而且能夠有效地降低後端數據源的壓力。
共享Session:對於一些依賴 session 功能的服務來說,如果需要從單機變成集群的話,可以選擇 redis 來統一管理 session。
消息隊列系統:消息隊列系統可以說是一個大型網站的必備基礎組件,因為其具有業務 解耦、非實時業務削峰等特性。Redis提供了發布訂閱功能和阻塞隊列的功 能,雖然和專業的消息隊列比還不夠足夠強大,但是對於一般的消息隊列功 能基本可以滿足。比如在分布式爬蟲系統中,使用 redis 來統一管理 url隊列。
分布式鎖:在分布式服務中。可以利用Redis的setnx功能來編寫分布式的鎖,雖然這個可能不是太常用。 當然還有諸如排行榜、點贊功能都可以使用 Redis 來實現,但是 Redis 也不是什麼都可以做,比如數據量特別大時,不適合 Redis,我們知道 Redis 是基於內存的,雖然內存很便宜,但是如果你每天的數據量特別大,比如幾億條的用戶行為日誌數據,用 Redis 來存儲的話,成本相當的高。
⑸ 網站緩存功能什麼意思
1.減少 HTTP 請求數:一個頁面中包含的圖片,JS,CSS等每一個資源都會生成一個 HTTP 下載請求,由瀏覽器發向網站伺服器,如果減少這個請求數,會縮短網路傳輸的時間。
另外圖片盡量採用壓縮格式的,例如 jpg 就屬於一種壓縮圖片格式,bmp屬於無壓縮無失真圖片。這個需要網頁/網站設計人員綜合考慮這個因素。
優點:縮短網路傳輸事件,網路傳輸量小,減少伺服器端負載;
缺點:減少HTTP請求,有時候無法滿足網站發布信息的需求,盜鏈的出現也會增加HTTP請求;
2、採用緩存技術(webcache):這個是目前網站加速最主要的方式。如果利用代理/緩存加速伺服器去實現的話,網站在不需要做任何改動的情況下,就可實現大跨度的實現加速效果。實現的基本方式為:將指定的網站頁面周期性的緩存起來,緩存時間可從幾秒到幾天,在緩存時間內,頁面只需要生成一次,以後有用戶訪問這個頁面的時候,網站伺服器和資料庫就不再需要重新生成相同的頁面了,極大的減少了網站伺服器和資料庫負荷。我們做個簡單的對比,假設一個新聞熱點頁面,在一個小時可被訪問1萬次,如果這個新聞頁面每次被訪問的時候,都會通過讀取資料庫後再一遍一遍的編譯生成,在一個小時內將會重復性的生成1萬次;如果這個頁面被周期性的緩存10分鍾,也就是每間隔10分鍾才會被生成一次,一個小時內只會被生成6次,如果兩種方式一對比,效果就超級明顯,兩種比較下伺服器負荷的壓力比差別1000倍以上,緩存技術將使得網站負載在高峰期游刃有餘。Fikker網站加速軟體實際上是一款代理伺服器軟體,通過Fikker網站加速伺服器提供的頁面緩存(webcache)功能,將需要緩存的網站URL配置到頁面緩存中(支持正則表達式,通配符和精確地址匹配),並設定一定的緩存時間(幾秒到幾天),不需要重啟Fikker立即生效,如果有重要頁面變動,可通過清理緩存將指定的緩存頁面清理出去。
優點:網站不需要做任何改動,大幅減少伺服器和資料庫的負荷。
3、使用gzip壓縮:頁面壓縮主要是降低傳輸尺寸,提高傳輸效率。常用的 html,asp,php,jsp,txt,css,js等文本頁面,通過gzip壓縮可降低75%左右尺寸,也就是原來需要傳輸 100KB 的頁面,gzip壓縮後只需要 25KB 的傳輸數據了,加速的效果是非常明顯的。Fikker內置了gzip模塊,自動對壓縮的文件壓面進行壓縮傳輸。
4、使用非阻塞網路技術(non-block):提高網路響應速度,Linux 從 2.6 內核開始,專門引入 epoll 事件機制,相對於傳統的 select 事件機制,效率大大的增強,尤其在高並發情況下越發的明顯,幾個線程即可並發支持上萬並發連接,使用盡量少的線程除了減少內存開支還可減少頻繁的線程切換的開銷。Fikker軟體的Linux版本全面支持epoll事件機制,支持從連接建立到連接結束,從域名解析開始到結束的全非阻塞網路設計。
5、提高帶寬,加速頁面傳輸:利用帶寬加速方式常用是CDN,通過CDN運營商的網路將頁面分發出去,用戶訪問時可就從最近的節點獲取,達到加速目的。但這裡面有一個前提,就是需要頁面是靜態的,或動態頁面首先需要被生成出來,然後才能利用 CDN 的高速網路傳輸出去,從這個角度理解,CDN 與 緩存加速具有很強的互補性,即利用緩存技術加快頁面生成,利用CDN加快傳輸,缺一不可。
希望對你有事幫助。