[.net 物件導向程式設計進階] (14) 快取(Cache) (一) 認識快取技術

yubinfeng發表於2015-07-15

[.net 物件導向程式設計進階] (14) 快取(Cache)(認識快取技術

本節導讀:

快取(Cache)是一種用空間換時間的技術,在.NET程式設計中合理利用,可以極大的提高程式的執行效率。

本節將介紹如何利用快取寫出高效率的程式碼。

1. 什麼是快取(Cache)?

快取(Cache)是一種用空間換取時間的技術

存在於計算機中很多地方,用來將一些慢速裝置中的常用資料儲存在快速裝置中,取資料的時候直接從快速裝置中取。

比如CPU二級快取、記憶體、windows檔案讀取快取。

2. .NET快取技術分類

.NET的快取從軟體架構角度分為客戶端快取和伺服器端快取.

這裡主要介紹幾種常用的快取技術:

基於Web客戶端快取:Cookies

基於Sever端快取:SessionApplication、Cache

3. 快取的優缺點

快取的優點:以空間換取時間,通過快取,提高了訪問效率。

快取的缺點:對於即時性要求較高的程式來說,快取不具備即時性。

因此我們在使用快取技術時,要充分考慮使用環境,合理利用快取。

最常用的工廠反射模式中,我們就可以利用快取來儲存動態反射的物件,以備下次訪問時,快速返回.

4.客戶端快取Cookies

4.1 Cookie應用場景 

Cookie可以保持登入資訊到使用者下次與伺服器的會話,換句話說,下次訪問同一網站時,使用者會發現不必輸入使用者名稱和密碼就已經登入了(當然,不排除使用者手工刪除Cookie)。而還有一些Cookie在使用者退出會話的時候就被刪除了,這樣可以有效保護個人隱私。

主流的瀏覽器都預設支援Cookie,由於Cookie會記錄使用者的一些資訊,因此出現了很多廣告窗,就是利用這一特性,能知道我們最近都瀏覽和關注了什麼,從而定向顯示廣告。

4.2 Cookies的生命週期

Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存週期,在這個週期內Cookie有效,超出週期Cookie就會被清除。有些頁面將Cookie的生存週期設定為“0”或負值,這樣在關閉瀏覽器時,就馬上清除Cookie,不會記錄使用者資訊,更加安全。

因此Cookie的生命週期,只要不清除,就一直存在於快取檔案中。

4.3 Cookie的使用

Cookie在Web的應用非常廣泛。下面列舉我們常用的Jquery庫中對Cookie的操作

先說一下Jquery庫,目前可以說是Javascript的標準庫了,操作簡單,輕量級,非常受歡迎。由於本系列主要討論的是.NET物件導向程式設計,我們下面,簡單的列舉出基於Jquery庫的一個Cookie操作元件:jquery.cookie.js

使用方法

A.新新增一個會話 cookie

$.cookie('the_cookie', 'the_value');

注:當沒有指明 cookie有效時間時,所建立的cookie有效期預設到使用者關閉瀏覽器為止,所以被稱為

會話cookiesession cookie

B.建立一個cookie並設定有效時間為 7:

$.cookie('the_cookie', 'the_value', { expires: 7 });

注:當指明瞭cookie有效時間時,所建立的cookie被稱為持久 cookie persistent  cookie 

C.建立一個cookie並設定 cookie的有效路徑:

$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });

注:在預設情況下,只有設定 cookie的網頁才能讀取該 cookie。如果想讓一個頁面讀取另一個頁面設

置的cookie,必須設定cookie的路徑。cookie的路徑用於設定能夠讀取 cookie的頂級目錄。將這

個路徑設定為網站的根目錄,可以讓所有網頁都能互相讀取 cookie (一般不要這樣設定,防止出現衝突) 。 

D.讀取cookie

$.cookie('the_cookie'); // cookie存在 => 'the_value'

$.cookie('not_existing'); // cookie不存在 => null

E.刪除cookie,通過傳遞null作為cookie的值即可:

$.cookie('the_cookie', null); 

5. SessionApplication

5.1 Session .NET 5 中應用

如下: 

 <div style="position:fixed;top:200px;left:200px;width:200px;height:200px;text-align:center; line-height:100px;">

    @{
        ViewBag.Title = "Home Page";
        Session["user"] = "yubinfeng";
        string user = Session["user"] is Nullable ? "" : Session["user"].ToString();
     }
    Session 讀取:  @Html.Raw(user)  <br>
</div>

上面程式碼中括號中,使用的是MVC中的一些頁面語法,後面會涉及到,這裡主要說明Session的賦值及取值。

執行MVC專案結果如下:

 

Seeion生命週期是會話級,一個會話結束Session失效,開啟一個瀏覽器請求一個網站的頁面後,Session開始,當session超過時間限制(一般是20分種)後,session登出而失效 或是人為使用session.invalidate();使用session失效。

5.2 Application

另一個Application WebForm為應用程式級的儲存,生命週期為服務端應用程式啟用動時開始到應用程式重啟失效。比如公共線上人數等儲存可以用到,在MVC框架中會有更好的實現伺服器級儲存的方法,後面在MVC的時候具體介紹。

6. 要點:

本節主要介紹了快取的基礎知識及幾種快取的簡單應用,下一節重點說明伺服器端的快取Cache,這也是我們.NET程式設計的重點。

==============================================================================================  

 返回目錄

 <如果對你有幫助,記得點一下推薦哦,如有有不明白或錯誤之處,請多交流>  

<對本系列文章閱讀有困難的朋友,請先看《.net 物件導向程式設計基礎》>

<轉載宣告:技術需要共享精神,歡迎轉載本部落格中的文章,但請註明版權及URL>

.NET 技術交流群:467189533    .NET 程式設計

==============================================================================================   

相關文章