當前位置:首頁 » 硬碟大全 » 文件伺服器緩存方案
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

文件伺服器緩存方案

發布時間: 2022-12-19 17:47:17

㈠ 伺服器段怎麼設置緩存 nginx

在開發調試web的時候,經常會碰到因瀏覽器緩存(cache)而經常要去清空緩存或者強制刷新來測試的煩惱,提供下apache不緩存配置和nginx不緩存配置的設置。

apache:
首先確定配置文件httpd.conf中確已經載入mod_headers模塊。

LoadMole headers_mole moles/mod_headers.so

我們可以根據文件類型來讓瀏覽器每次都從伺服器讀取,這里測試用css、js、swf、php、html、htm這幾種文件。

Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"

nginx:

location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;
}

對於站點中不經常修改的靜態內容(如圖片,JS,CSS),可以在伺服器中設置expires過期時間,控制瀏覽器緩存,達到有效減小帶寬流量,降低伺服器壓力的目的。

以Nginx伺服器為例:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
#過期時間為30天,
#圖片文件不怎麼更新,過期可以設大一點,
#如果頻繁更新,則可以設置得小一點。
expires 30d;
}

location ~ .*\.(js|css)$ {
expires 10d;
}

㈡ 文件伺服器文件載入較慢的解決方案(CDN+Nginx)

通過nginx解決圖片載入較慢,連接數較多,寬頻佔用的問題。可以通過簡單配置達到目的,主要配置以下幾項內容:

小結: 也許是我對nginx的基礎以及理解不夠全面,但是我覺得寬頻因素等條件都擺在那裡,在同一台文件伺服器上也只能是限制客戶端的連接來進行優化。所以只是簡單做了優化後久沒有深化研究,而且我們的文件伺服器上的文件也不少。

CDN(Content Delivery Network): 內容分發網路,通過cdn訪問文件伺服器時,cdn會將文件緩存到cdn伺服器,下一次訪問該文件時,就直接從cdn的緩存伺服器上獲取文件,而不需要到文件伺服器獲取文件。具體的知識介紹可參考 網路 。

阿里雲的CDN介紹:內容分發網路(Content Delivery Network,CDN)是建立並覆蓋在承載網上,由不同區域的伺服器組成的分布式網路。將源站資源緩存到全國各地的邊緣伺服器,供用戶就近獲取,降低源站壓力。

根據文檔中阿里雲在國內擁有2300+節點,所有節點均接入萬兆網卡,單節點存儲容量達40TB 1.5PB,帶寬負載達到40Gbps 200Gbps,具備130Tbps帶寬儲備能力。所以我們暫時選擇了阿里雲的CDN。

我們根據阿里雲的CDN文檔進行配置之後遇到一個問題,cdn的域名配置成功後,在nginx上找不到文件,直接跑出404的異常。後面通過在 nginx中增加了一個解析cdn域名執行文件的配置 之後文件訪問正常。

如果文件數量不算特別多,訪問量不算特別大,可以通過配置本地nginx即可解決部分寬頻壓力,畢竟這個是不用花錢的。如果訪問量下不了,而且寬頻壓力較大,則直接推薦使用阿里雲的CDN服務,配置各種都挺簡單。我們的伺服器是託管在電信機房,百兆共享寬頻,在沒有使用CDN之前,每天8:00-00:00這個時間段基本上伺服器網路下行速度11M/s,配置CDN之後基本在1-5m/s之間浮動。所以說使用CDN還是能解決一大部分問題。

㈢ 如何將html文件緩存到伺服器內存 (iis)

你把後綴名改為aspx,然後加上緩存屬性不就可以了嗎?

如果不改後綴,IIS會直接自己處理html文件,根本到不了.net處理程序,更不用談緩存到內存中。

當然你也可以修改html文件的映射,然後自己寫httpHandler,不過這樣貌似太過多此一舉了。

㈣ web中緩存的幾種方式

1 應用程序實現的動態頁面緩存
應用程序把動態文件生成的html文件緩存到文件伺服器,以後用戶請求動態文件,直接從文件伺服器載入對應的靜態緩存的html文件返回給用戶,這裡面主要節省了動態語言的執行時間和資料庫訪問時間。但是會增加了緩存框架的載入和緩存查找的時間。

2 把解釋執行的開發語言編譯成為目標代碼
這個主要把解釋執行的高級語言,例如java,php直接編譯成為平台相關的目標代碼,匯編代碼。在java裡面,比較著名的就是即時編譯器(JIT),其他的語言也要類似的機制。這裡面主要節省了就是解釋執行代碼的時間。這個會增加即時編譯的時間。

3 利用反向代理伺服器的緩存
利用類似nginx的反向代理伺服器,對請求的url對應的輸出的進行緩存。這個緩存和應用程序實現的動態頁面緩存類似,只不過用反向代理充當了應用程序的緩存實現。主要節省了動態余元執行時間和資料庫訪問時間。

4 客戶端瀏覽器緩存
客戶端瀏覽器緩存主要是通過在http頭部增加
Last-Modified,If-Modified-Since,Expires,Cache-Control等標識,和伺服器進行協商,是否是採用客戶的本機緩存來實現。
其中這裡面也會分為三種方式
1 通過Last-Modified,If-Modified-Since方式和伺服器通信,客戶發出http請求中包含If-Modified-Since,如果伺服器端代碼沒有修改,伺服器端返回302響應代碼的請求響應頭(內容不返回)客戶端則直接用本機緩存的內容緩存顯示結果。相當於節省了伺服器執行代碼時間以及數據傳輸時間。
2 通過Expires,Cache-Control控制,客戶端發現如果上次請求的頁面還未過期,通過Expires或者Cache-Control進行辨別,則直接顯示本機緩存的內容,不與伺服器進行通信。

總結一下:1 一般的高並發的應用程序,都在web層採用了以上幾種緩存,一般靜態資源(圖片,js,css)都會採用nginx反向代理+客戶端緩存來實現。
2 對於門戶網站,尤其是首頁的新聞,一般都會緩存起來,可以通過反向代理也可以通過應用程序緩存實現方式
3 對於下載或者視頻網站,由於數據傳輸比較大,直接採用瀏覽器本地緩存實現。

㈤ 緩存策略的選擇

適合緩存的內容

1. 不變的圖像,如logo,圖標等

2. js、css靜態文件

3. 可下載的內容,媒體文件

適合協商緩存

1. HTML文件

2. 經常替換的圖片

3. 經常修改的js、css文件,js、css文件的載入可以加入文件的簽名來拒絕緩存,如『index.css?簽名』,『index.簽名.js』

不建議緩存的內容

1. 用戶隱私等敏感數據

2. 經常改變的API數據介面

NGINX配置緩存策略

本地緩存配置

1. add_header指令:添加狀態碼為2XX和3XX的響應頭信息,設置代碼add_header name value [always];,可以設置Pragma、Expires、Cache-Control,可以繼承

2. expires指令:通知瀏覽器過期時長,設置代碼expires time;

3. Etag指令:指定簽名,設置代碼etag on|off,默認on

前端代碼和資源壓縮

優勢

1. 讓資源文件更小,加快文件在網路中的傳輸,讓網頁更快的展現,降低帶寬和流量的開銷

壓縮方式

1. js、css、圖片、html代碼的壓縮

2. gzip壓縮

gzip配置

gzip on|off; #是否開啟gzipgzip_buffers 32 4K|16 8K; #緩沖(在內存中緩存幾塊?每塊多大)gzip_comp_level [1-9] #推薦6,壓縮級別(級別越高,壓得越小,越浪費CPU計算資源)

gzip_disable #正則匹配UA,什麼樣的Uri不進行gzip

gzip_min_length 200 #開始壓縮的最小長度

gzip_http_version 1.0|1.1 #開始壓縮的http協議版本

gzip_proxied #設置請求者代理伺服器,該如何緩存內容

gzip_types text/plain application/xml image/png #對哪些類型的文件壓縮,如txt、xml、css

gzip_vary on|off #是否傳輸gzip壓縮標志

CDN加速

定義

1. CDN的全稱content delivery network,內容分發網路

2. 盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定

3. 在網路各處放置節點伺服器所構成的有的互聯網基礎之上的一層智能虛擬網路

4. CDN系統能夠實現地根據網路流量和各節點的連接、負載狀況以及到用戶距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上

優勢

1. 本地cache加速,提高了企業站點(尤其含有大量圖片和靜態頁面站點)的訪問速度

2. 跨運營商的網路加速,保證不同網路的用戶都能得到良好的訪問質量

3. 遠程訪問用戶根據DNS負載均衡技術只能選擇cache伺服器

4. 自動生成伺服器的遠程Mirror(鏡像)cache伺服器,遠程用戶訪問時從cache伺服器上讀取數據,減少遠程訪問的帶寬、分擔網路流量、減輕原站點web伺服器負載等功能

5. 廣泛分布的cdn節點加上節點之間的智能冗餘機制,可以有效地預防黑客入侵

工作原理

1. 用戶發起請求

2. 智能DNS的解析(根據IP判斷地理位置、接入網類型、選擇路由最短和負載最輕的伺服器)

3. 取得緩存伺服器ip

4. 把內容返回給用戶(如果緩存中有,沒有就執行5、6、7)

5. 向源站發起請求

6. 將結果返回給用戶

7. 將結果存入緩存伺服器

適用場景

1. 站點或者應用中大量靜態資源的加速分發,例如css、js、圖片和HTML

2. 大文件下載

3. 直播網站

獨立圖片伺服器

必要性

1. 分擔web伺服器的I/O負載,將耗費資源的圖片伺服器分離出來,提高伺服器的性能和穩定性

2. 能夠專門對圖片伺服器進行優化,為圖片伺服器設置針對性的緩存方案,減少帶寬成本,提高訪問速度

3. 提高網站的可擴展性,通過增加圖片伺服器,提高圖片吞吐能力

採用獨立域名

原因:

1. 同一域名下瀏覽器的並發連接數有限制,突破瀏覽器連接數的限制

2. 由於cookie的原因,對緩存不利,大部分web cache都只緩存不帶cookie的請求,導致每次的圖片請求都不能命中cache

如何圖片上傳和同步

1. NFS共享方式

2. 利用FTP同步

動態語言靜態化

將現有的PHP等動態語言的邏輯代碼生成為靜態的HTML文件,用戶訪問動態腳本重定向到靜態HTML文件的過程。對實時性要求不高

原因:

1. 動態腳本通過會做邏輯計算和數據查詢,訪問量越大,伺服器壓力越大

2. 訪問量大時可能會造成CPU負載過高,資料庫伺服器壓力過大

3. 靜態化可以減低邏輯處理壓力,降低資料庫伺服器查詢壓力

實現方法

1. 使用模板引擎

2. 利用ob系列函數

需要獲取swoole、workerman、TP、laravel、vue、Linux、redis以及性能優化,並發項目實戰,微服務 架構方面的資料,可以私信我哦

㈥ 怎麼設置文件伺服器緩存

我得電腦-右鍵點擊屬性-點擊高級--點擊高級--最下面虛擬內存--點擊更改,改成你需要的大小就可以了

㈦ 瀏覽器緩存和伺服器緩存

一、瀏覽器緩存

瀏覽器緩存即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

㈧ 如何將html文件緩存到伺服器內存 (iis)

你好,這樣是不太可取的。IIS和網站代碼都沒有這個功能設置。內存是用來臨時存放運行文件的,一但斷電就沒有了,不能用來存長固定的文件。。如果同時請求訪問的人數過多,那麼可能會響應不過來。。另外,個人覺得目前我們網站訪問的瓶頸並不是硬碟速度,伺服器硬碟讀也是百M/s的,而網路一般是十M,最多也才百M吧。。如果判斷出的確是硬碟速度瓶頸,那麼就使用固態硬碟。。。
個人建議啟用IIS的Gzip壓縮(網路:http://ke..com/view/966625.htm)是非常有效的。

當然了,如果你一定要將文件載入到內存里,可以試著用下面的方式,只是思路, 沒有驗證:
1、安裝使用 內存虛擬硬碟(ramdisk) 相關軟體,通過把內存虛擬成硬碟的技術增加一個高速的磁碟。
2、添加一個自動啟動任務,就是在完成內存虛擬硬碟後,將網站源文件直接拷到那個虛擬盤分區里去。然後再啟動IIS。 (這個步驟用一個批處理文件就可以)

理論上是可行的,我相信也一定可以成功,但至於效果,不太敢保證。

如果是靜態文件,直接拷貝就可以,如果是動態的,在保存的,那麼批處理文件就要進行修改了,不然斷電後沒有保存。。不過如果是動態網站,只需要把常用到的文件載入到內存是吧,那隻在IIS上建立相應的虛擬目錄到內存虛擬的硬碟上,那些有改動的文件,如xml文件和mdb資料庫等,就直接保存到物理硬碟路徑上,這樣可以避免斷電和內存出錯導致的數據丟失

內存虛擬硬碟 網路:http://ke..com/view/1517248.htm
內存虛擬硬碟軟體 vsuite ramdisk 網路:http://ke..com/view/5130752.htm

希望以上回復對你有幫助

㈨ 伺服器上的大文件是怎麼存儲的

如何做一台文件伺服器假如你是某公司的系統管理員,現在公司要做一台文件伺服器。公司購買了一台某品牌的伺服器,在這台伺服器內插有三塊硬碟。公司有三個部門---銷售,財務,技術。每個部門有三個員工,其中一名是其部門經理(另兩名是副經理)1.在三塊硬碟上共創建三個分區(盤符),並要求在創建分區的時候,使磁碟實現容錯的功能;2.在伺服器上創建相應的用戶帳號和組;命名規范,如:用戶名:sales-1,sales-2……;組名:sale,tech……要求用戶帳號只能從網路訪問伺服器,不能在伺服器本地登錄3.在文件伺服器上創建三個文件夾分別存放各部門的文件,並要求只有本部門的用戶能訪問其部門的文件夾(完全控制的許可權),每個部門的經理和公司總經理可以訪問所有文件夾(讀取),另創建一個公共文件夾,使得所有用戶都能在裡面查看和存放公共的文件;4.每個部門的用戶可以在伺服器上存放最多100M的文件;5.做好文件伺服器的備份工作以及災難恢復的備份工作;發送給我的好友提醒我回答有更新你可以把這個生意經分享給旺旺,MSN或QQ上的好友當這個生意經的回答有更新時,您可以及時收到提醒發送給好友生意經鏈接:窗體頂端發送描述:窗體底端郁悶啦!看看這個問題,你一定要幫我啊!這個東東太實用了,看完記得收藏哦!旺旺浮出提醒好友生意經的地址已經復制您可以粘帖到MSN或者郵件發給您的好友收藏成功,回答有更新時旺旺會浮出提醒你哦!現在就去查看我的收藏網友回答(1)學會安裝和配置文件伺服器。(2)學會伺服器端共享文件夾的配置和管理。(3)學會客戶端訪問共享文件夾的方法。(4)學會分布式文件系統的設置方法。(5)實驗學時:22實驗相關理論與知識計算機網路的基本功能是在計算機間共享信息,文件共享可以說是最基本、最普遍的一種網路服務。雖然越來越多的用戶購置專用文件伺服器(如NAS),但是通用操作系統提供的文件伺服器功能也非常實用,完全能滿足一般的文件共享需求,下面主要介紹WindowsServer2003文件伺服器的配置、管理和應用。文件伺服器負責共享資源的管理和傳送接收,管理存儲設備(硬碟、光碟、磁帶)中的文件,為網路用戶提供文件共享服務,也稱文件共享伺服器。除了文件管理功能之外,文件伺服器還要提供配套的磁碟緩存、訪問控制、容錯等功能。部署文件伺服器,主要要考慮以下3個因素。·存取速度:快速存取伺服器上的文件,例如可提供磁碟緩存加速文件讀取。·存儲容量:要有足夠的存儲空間以容納眾多網路用戶的文件,可使用磁碟陣列。·安全措施:實現網路用戶訪問控制,確保文件共享安全。文件伺服器主要有兩類解決方案,一類是專用文件伺服器,另一類是使用PC伺服器或PC計算機組建的通用文件伺服器。專用文件伺服器是專門設計成文件伺服器的專用計算機,以前主要是運行操作系統、提供網路文件系統的大型機、小型機,現在的專用文件伺服器則主要指具有文件伺服器的網路存儲系統,如NAS和SAN。NAS獨立於操作系統平台,可支持多種操作系統和網路文件系統,提供集中化的網路文件伺服器和存儲環境,比一般的文件伺服器的功能更強大,可看作是專用存儲伺服器,可為那些訪問和共享大量文件系統數據的用戶提供高效、性能價格比優異的解決方案。SAN全稱存儲區域網路,是一種用戶存儲服務的特殊網路,通常由磁碟陣列、光碟庫、磁帶庫和光纖交換機組成。NAS可作為獨立的文件伺服器,提供文件級的數據訪問功能,更適合文件共享。而SAN提供數據塊級的數據訪問功能,更適合資料庫和海量數據。目前一般用戶使用PC伺服器或PC計算機,通過網路操作系統來提供文件服務,UNIX、Linux、Novell、Windows等操作系統都可提供文件共享服務。Windows網路操作系統,如WindowsNTServer、Windows2000Server和最新的WindowsServer2003由於操作管理簡單、功能強大,在中小用戶群中的普及率非常高,許多文件伺服器都運行Windows網路操作系統。下面將重點以WindowsServer2003為例介紹文件伺服器的配置、管理和應用。3實驗環境與設備C/S模式的網路環境,包括一台WindowsXP客戶機和一台WindowsServer2003伺服器。兩種可選的物理拓撲(交叉線連接或通過集線器/交換機用直連線連接)。4實驗內容與步驟4.0伺服器的基本網路配置,包括IP地址為"192.168.105.XX"、網關為"192.168.105.254"等。(註:"XX"代表你配置機器的主機編號,"nXX"代表你的伺服器主機名,例如你坐在5號機上則"XX"代表"05","1XX"代表"105",配置此機的IP地址為"192.168.105.5"、主機名為"n05",下同)。4.1安裝和配置文件伺服器文件伺服器提供網路上的中心位置,可供存儲文件並通過網路與用戶共享文件。當用戶需要重要文件時,可以訪問文件伺服器上的文件,而不必在各自獨立的計算機之間傳送文件。如果網路用戶需要對相同文件和可通過網路訪問的應用程序的訪問許可權,就要將該計算機配置為文件伺服器。默認情況下,在安裝WindowsServer2003系統時,將自動安裝"Microsoft網路的文件和列印共享"網路組件。如果沒有該組件,可通過網路連接屬性對話框安裝。1.准備工作在部署文件伺服器之前,應當做好以下准備工作。·劃出專門的硬碟分區(卷)用於提供文件共享服務,而且要保證足夠的存儲空間,必要時使用磁碟陣列。·磁碟分區(卷)使用NTFS文件系統,因為FAT32缺乏安全性,而且不支持文件和文件夾壓縮、磁碟配額、文件加密或單個文件許可權等重要特性。提示:使用WindowsServer2003自帶的工具即可將FAT32轉換成NTFS格式。該工具名為Convert.exe,位於Windows安裝目錄下的System32目錄中。在命令行狀態運行該工具即可,如ConvertE:/FS:NTFS。·確定是否要啟用磁碟配額,以限制用戶使用的磁碟存儲空間。·確定是否要使用索引服務,以提供更快速、更便捷的搜索服務。2.配置文件伺服器只要將WindowsServer2003計算機上的某個文件夾共享出來,就會自動安裝文件伺服器,也可通過"配置您的伺服器向導"工具來安裝文件伺服器角色。這兩種方法的差別是,第二種方法提供的選項,並在程序菜單中提供文件伺服器管理台工具。這里介紹採用第二種方法的基本步驟。(1)啟動"配置您的伺服器向導"工具。默認情況下,登錄WindowsServer2003時將自動啟動"管理您的伺服器"(也可從控制面板中選擇【管理工具】→【管理您的伺服器】),單擊【添加或刪除角色】。另一種方法是直接從控制面板中選擇【管理工具】→【管理您的伺服器】→【配置您的伺服器向導】。單擊【下一步】按鈕。(2)在【配置選項】界面中選擇【自定義配置】,單擊【下一步】按鈕。(3)在【伺服器角色】界面中,如果【文件伺服器】的【已配置】狀態為"否",就單擊【文件伺服器】,然後單擊【下一步】。注意:如果【文件伺服器】的【已配置】狀態為"是",就單擊【文件伺服器】,再單擊【下一步】按鈕打開【角色刪除確認】界面,並選擇【刪除文件伺服器角色】復選框,即可刪除文件伺服器角色,這樣該伺服器上的文件和文件夾就不再共享,依賴於這些共享資源的網路用戶、程序或宿主都將無法與它們連接。(4)出現【文件伺服器磁碟配額】對話框中,為伺服器上所有NTFS分區設置默認的磁碟配額。勾選【為此伺服器的新用戶設置默認磁碟空間配額】和【拒絕將磁碟空間給超過配額限制的用戶】。單擊【下一步】按鈕。默認情況下是沒有啟用磁碟配額。(5)出現【文件伺服器索引服務】對話框,確定是否要使用索引服務。單擊【下一步】按鈕。一般情況下不需索引服務,只有在用戶要經常搜索該伺服器上的文件內容時才啟用它。(6)出現【選擇總結】對話框,查看和確認已經選擇的選項,單擊【下一步】按鈕。本例中有"設置默認磁碟配額"、"安裝文件伺服器管理"和"運行共享文件夾向導來添加一個新的共享文件夾或共享已有文件夾"等選項。(7)自動完成相關配置後,出現共享文件夾向導,根據提示配置共享文件夾以供其他用戶共享。只有配置了共享文件夾之後,文件伺服器才能建立。(8)單擊【下一步】按鈕,出現【文件夾路徑】對話框,指定要共享的文件夾路徑。可通過【瀏覽】在C盤目錄下新建一個【FileShare】作為共享目錄,此時【文件夾路徑】輸入框中將出現【C:FileShare】(如果C盤中已經建立過此文件夾,才可以在此輸入框中直接輸入)。(9)單擊【下一步】按鈕,出現【名稱、描述和設置】對話框,指定共享名。(10)單擊【下一步】按鈕,出現【許可權】對話框,指定共享許可權為【管理員有完全訪問許可權;其他用戶有隻讀訪問許可權】,單擊【完成】按鈕。這里提供了幾種預置的許可權,也可以自定義許可權。(11)【共享成功】對話框中顯示共享成功,給出新建共享文件夾的信息。如果要繼續設置其他共享文件夾,則選中下面的復選框。單擊【關閉】按鈕,【完成】。至此文件伺服器配置就完成了。接下來可執行各項文件管理任務。3.文件伺服器管理工具(以下方法至少掌握一種)WindowsServer2003提供了用於文件伺服器配置管理的多種工具。·文件伺服器管理控制台:打開"管理您的伺服器"工具,在【文件伺服器】區域單擊【管理此文件伺服器】,打開該控制台。要使用"配置您的伺服器向導"工具安裝文件伺服器,可從程序菜單中選擇【管理工具】→【文件伺服器管理】命令打開該控制台。·"共享文件夾"管理工具:也可通過"計算機管理"工具中的"共享文件夾"管理工具來執行共享文件夾的配置管理,從程序菜單中選擇【管理工具】→【計算機管理】,【共享文件夾】節點即可。·Windows資源管理器:可直接將文件夾配置為共享文件夾。·命令行工具:如netshare可顯示有關本地計算機上全部共享資源的信息。

㈩ asp.net 伺服器緩存技術

實現

要實現頁面輸出緩存,只要將一條 OutputCache 指令添加到頁面即可。

<%@ OutputCache Duration="60" VaryByParam="*" %>

如同其他頁面指令一樣,該指令應該出現在 ASPX 頁面的頂部,即在任何輸出之前。它支持五個屬性(或參數),其中兩個是必需的。

Duration

必需屬性。頁面應該被緩存的時間,以秒為單位。必須是正整數。

Location

指定應該對輸出進行緩存的位置。如果要指定該參數,則必須是下列選項之一:Any、Client、Downstream、None、Server 或 ServerAndClient。

VaryByParam

必需屬性。Request 中變數的名稱,這些變數名應該產生單獨的緩存條目。"none" 表示沒有變動。"*" 可用於為每個不同的變數數組創建新的緩存條目。變數之間用 ";" 進行分隔。

VaryByHeader

基於指定的標頭中的變動改變緩存條目。

VaryByCustom

允許在 global.asax 中指定自定義變動(例如,"Browser")。

利用必需的 Duration 和 VaryByParam 選項的組合可以處理大多數情況。例如,如果您的產品目錄允許用戶基於 categoryID 和頁變數查看目錄頁,您可以用參數值為 "categoryID;page" 的 VaryByParam 將產品目錄緩存一段時間(如果產品不是隨時都在改變,一小時還是可以接受的,因此,持續時間是 3600 秒)。這將為每個種類的每個目錄頁創建單獨的緩存條目。每個條目從其第一個請求算起將維持一個小時。

VaryByHeader 和 VaryByCustom 主要用於根據訪問頁面的客戶端對頁面的外觀或內容進行自定義。同一個 URL 可能需要同時為瀏覽器和行動電話客戶端呈現輸出,因此,需要針對不同的客戶端緩存不同的內容版本。或者,頁面有可能已經針對 IE 進行了優化,但需要能針對 Netscape 或 Opera 完全降低優化(而不僅僅是破壞頁面)。後一個例子非常普遍,我們將提供一個說明如何實現此目標的示例:

示例:VaryByCustom 用於支持瀏覽器自定義

為了使每個瀏覽器都具有單獨的緩存條目,VaryByCustom 的值可以設置為 "browser"。此功能已經內置在緩存模塊中,並且將針對每個瀏覽器名稱和主要版本插入單獨的頁面緩存版本。

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser" %>

片段緩存,用戶控制項輸出緩存

緩存整個頁面通常並不可行,因為頁面的某些部分是針對用戶定製的。不過,頁面的其他部分是整個應用程序共有的。這些部分最適合使用片段緩存和用戶控制項進行緩存。菜單和其他布局元素,尤其是那些從數據源動態生成的元素,也應該用這種方法進行緩存。如果需要,可以將緩存的控制項配置為基於對其控制項(或其他屬性)的更改或由頁面級輸出緩存支持的任何其他變動進行改變。使用同一組控制項的幾百個頁面還可以共享那些控制項的緩存條目,而不是為每個頁面保留單獨的緩存版本。

實現

片段緩存使用的語法與頁面級輸出緩存一樣,但其應用於用戶控制項(.ascx 文件)而不是 Web 窗體(.aspx 文件)。除了 Location 屬性,對於 OutputCache 在 Web 窗體上支持的所有屬性,用戶控制項也同樣支持。用戶控制項還支持名為 VaryByControl 的 OutputCache 屬性,該屬性將根據用戶控制項(通常是頁面上的控制項,例如,DropDownList)的成員的值改變該控制項的緩存。如果指定了 VaryByControl,可以省略 VaryByParam。最後,在默認情況下,對每個頁面上的每個用戶控制項都單獨進行緩存。不過,如果一個用戶控制項不隨應用程序中的頁面改變,並且在所有頁面都使用相同的名稱,則可以應用 Shared="true" 參數,該參數將使用戶控制項的緩存版本供所有引用該控制項的頁面使用。

示例

<%@ OutputCache Duration="60" VaryByParam="*" %>

該示例將緩存用戶控制項 60 秒,並且將針對查詢字元串的每個變動、針對此控制項所在的每個頁面創建單獨的緩存條目。

<%@ OutputCache Duration="60" VaryByParam="none"

VaryByControl="CategoryDropDownList" %>

該示例將緩存用戶控制項 60 秒,並且將針對 CategoryDropDownList 控制項的每個不同的值、針對此控制項所在的每個頁面創建單獨的緩存條目。

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"

Shared="true %>

最後,該示例將緩存用戶控制項 60 秒,並且將針對每個瀏覽器名稱和主要版本創建一個緩存條目。然後,每個瀏覽器的緩存條目將由引用此用戶控制項的所有頁面共享(只要所有頁面都用相同的 ID 引用該控制項即可)。
頁面級和用戶控制項級輸出緩存的確是一種可以迅速而簡便地提高站點性能的方法,但是在 ASP.NET 中,緩存的真正靈活性和強大功能是通過 Cache 對象提供的。使用 Cache 對象,您可以存儲任何可序列化的數據對象,基於一個或多個依賴項的組合來控制緩存條目到期的方式。這些依賴項可以包括自從項被緩存後經過的時間、自從項上次被訪問後經過的時間、對文件和/或文件夾的更改以及對其他緩存項的更改,在略作處理後還可以包括對資料庫中特定表的更改。

在 Cache 中存儲數據

在 Cache 中存儲數據的最簡單的方法就是使用一個鍵為其賦值,就像 HashTable 或 Dictionary 對象一樣:

Cache["key"] = "value";

這種做法將在緩存中存儲項,同時不帶任何依賴項,因此它不會到期,除非緩存引擎為了給其他緩存數據提供空間而將其刪除。要包括特定的緩存依賴項,可使用 Add() 或 Insert() 方法。其中每個方法都有幾個重載。Add() 和 Insert() 之間的唯一區別是,Add() 返回對已緩存對象的引用,而 Insert() 沒有返回值(在 C# 中為空,在 VB 中為 Sub)。

示例

Cache.Insert("key", myXMLFileData, new

System.Web.Caching.CacheDependency(Server.MapPath("users.xml")));

該示例可將文件中的 xml 數據插入緩存,無需在以後請求時從文件讀取。 CacheDependency 的作用是確保緩存在文件更改後立即到期,以便可以從文件中提取最新數據,重新進行緩存。如果緩存的數據來自若干個文件,還可以指定一個文件名的數組。

Cache.Insert("dependentkey", myDependentData, new

System.Web.Caching.CacheDependency(new string[] {}, new string[]

{"key"}));

該示例可插入鍵值為 "key" 的第二個數據塊(取決於是否存在第一個數據塊)。如果緩存中不存在名為 "key" 的鍵,或者如果與該鍵相關聯的項已到期或被更新,則 "dependentkey" 的緩存條目將到期。

Cache.Insert("key", myTimeSensitiveData, null,

DateTime.Now.AddMinutes(1), TimeSpan.Zero);

絕對到期:此示例將對受時間影響的數據緩存一分鍾,一分鍾過後,緩存將到期。注意,絕對到期和滑動到期(見下文)不能一起使用。

Cache.Insert("key", myFrequentlyAccessedData, null,

System.Web.Caching.Cache.NoAbsoluteExpiration,

TimeSpan.FromMinutes(1));

滑動到期:此示例將緩存一些頻繁使用的數據。數據將在緩存中一直保留下去,除非數據未被引用的時間達到了一分鍾。注意,滑動到期和絕對到期不能一起使用。

更多選項

除了上面提到的依賴項,我們還可以指定項的優先順序(依次為 low、high、NotRemovable,它們是在 System.Web.Caching.CacheItemPriority 枚舉中定義的)以及當緩存中的項到期時調用的 CacheItemRemovedCallback 函數。大多數時候,默認的優先順序已經足夠了 — 緩存引擎可以正常完成任務並處理緩存的內存管理。CacheItemRemovedCallback 選項考慮到一些很有趣的可能性,但實際上它很少使用。不過,為了說明該方法,我將提供它的一個使用示例:

CacheItemRemovedCallback 示例

System.Web.Caching.CacheItemRemovedCallback callback = new System.Web.Caching.CacheItemRemovedCallback (OnRemove);

Cache.Insert("key",myFile,null,

System.Web.Caching.Cache.NoAbsoluteExpiration,

TimeSpan.Zero,

System.Web.Caching.CacheItemPriority.Default, callback);

. . .

public static void OnRemove(string key,

object cacheItem,

System.Web.Caching.CacheItemRemovedReason reason)

{

AppendLog("The cached value with key " + key +

" was removed from the cache. Reason: " +

reason.ToString());

}

該示例將使用 AppendLog() 方法(這里不討論該方法,請參閱 Writing Entries to Event Logs)中定義的任何邏輯來記錄緩存中的數據到期的原因。通過在從緩存中刪除項時記錄這些項並記錄刪除的原因,您可以確定是否在有效地使用緩存或者您是否可能需要增加伺服器上的內存。注意,callback 是一個靜態(在 VB 中為 Shared)方法,建議使用該方法的原因是,如果不使用它,保存回調函數的類的實例將保留在內存中,以支持回調(對 static/Shared 方法則沒有必要)。
該特性有一個潛在的用處 — 在後台刷新緩存的數據,這樣用戶永遠都不必等待數據被填充,但數據始終保持相對較新的狀態。但實際上,此特性並不適用於當前版本的緩存 API,因為在從緩存中刪除緩存的項之前,不觸發或不完成回調。因此,用戶將頻繁地發出嘗試訪問緩存值的請求,然後發現緩存值為空,不得不等待緩存值的重新填充。我希望在未來的 ASP.NET 版本中看到一個附加的回調,可以稱為 ,如果定義了該回調,則必須在刪除緩存項之前完成執行。

緩存數據引用模式

每當我們嘗試訪問緩存中的數據時,都應該考慮到一種情況,那就是數據可能已經不在緩存中了。因此,下面的模式應該普遍適用於您對緩存的數據的訪問。在這種情況下,我們假定已緩存的數據是一個數據表。

public DataTable GetCustomers(bool BypassCache)

{

string cacheKey = "CustomersDataTable";

object cacheItem = Cache[cacheKey] as DataTable;

if((BypassCache) (cacheItem == null))

{

cacheItem = GetCustomersFromDataSource();

Cache.Insert(cacheKey, cacheItem, null,

DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),

TimeSpan.Zero);

}

return (DataTable)cacheItem;

}

關於此模式,有以下幾點需要注意:

? 某些值(例如,cacheKey、cacheItem 和緩存持續時間)是一次定義的,並且只定義一次。

? 可以根據需要跳過緩存 — 例如,當注冊一個新客戶並重定向到客戶列表後,最好的做法可能就是跳過緩存,用最新數據重新填充緩存,該數據包括新插入的客戶。

? 緩存只能訪問一次。這種做法可以提高性能,並確保不會發生 NullReferenceExceptions,因為該項在第一次被檢查時是存在的,但第二次檢查之前就已經到期了。

? 該模式使用強類型檢查。C# 中的 "as" 運算符嘗試將對象轉換為類型,如果失敗或該對象為空,則只返回 null(空)。

? 持續時間存儲在配置文件中。在理想的情況下,所有的緩存依賴項(無論是基於文件的,或是基於時間的,還是其他類型的依賴項)都應該存儲在配置文件中,這樣就可以進行更改並輕松地測量性能。我還建議您指定默認緩存持續時間,而且,如果沒有為所使用的 cacheKey 指定持續時間,就讓 GetCacheSecondsFromConfig() 方法使用該默認持續時間。

相關的代碼示例是一個 helper 類,它將處理上述所有情況,但允許通過一行或兩行代碼訪問緩存的數據。請下載 CacheDemos.msi。

小結

緩存可以使應用程序的性能得到很大的提高,因此在設計應用程序以及對應用程序進行性能測試時應該予以考慮。應用程序總會或多或少地受益於緩存,當然有些應用程序比其他應用程序更適合使用緩存。對 ASP.NET 提供的緩存選項的深刻理解是任何 ASP.NET 開發人員應該掌握的重要技巧。

盡早緩存;經常緩存

您應該在應用程序的每一層都實現緩存。向數據層、業務邏輯層、UI 或輸出層添加緩存支持。內存現在非常便宜 — 因此,通過以智能的方式在整個應用程序中實現緩存,可以獲得很大的性能提高。

緩存可以掩蓋許多過失

緩存是一種無需大量時間和分析就可以獲得"足夠良好的"性能的方法。這里再次強調,內存現在非常便宜,因此,如果您能通過將輸出緩存 30 秒,而不是花上一整天甚至一周的時間嘗試優化代碼或資料庫就可以獲得所需的性能,您肯定會選擇緩存解決方案(假設可以接受 30 秒的舊數據)。緩存正是那些利用 20% 付出獲得 80% 回報的特性之一,因此,要提高性能,應該首先想到緩存。不過,如果設計很糟糕,最終卻有可能帶來不良的後果,因此,您當然也應該盡量正確地設計應用程序。但如果您只是需要立即獲得足夠高的性能,緩存就是您的最佳選擇,您可以在以後有時間的時候再盡快重新設計應用程序。

頁面級輸出緩存

作為最簡單的緩存形式,輸出緩存只是在內存中保留為響應請求而發送的 HTML 的副本。其後再有請求時將提供緩存的輸出,直到緩存到期,這樣,性能有可能得到很大的提高(取決於需要多少開銷來創建原始頁面輸出 - 發送緩存的輸出總是很快,並且比較穩定)。

你詳細看看