天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

帶你走進緩存世界

  我們搞程序的多多少少都了解點算法??傮w來講,算法是什么?算法就是“時間”和“空間”的互換策略。我們常??季恳粋€算法的時間復雜度或空間復雜度,如果我們有絕對足夠的時間或空間,那么算法就不需要了,可惜這種條件是不存在的,只是在某些情況下相對來說我們不用去考慮其中一個。今天我們討論的“緩存”,自然就是“用空間換時間”的算法。 緩存就是把一些數據暫時存放于某些地方,可能是內存,也有可能硬盤??傊?,目的就是為了避免某些耗時的操作。我們常見的耗時的操作,比如數據庫的查詢、一些數據的計算結果,或者是為了減輕服務器的壓力。其實減輕壓力也是因查詢或計算,雖然短耗時,但操作很頻繁,累加起來也很長,造成嚴重排隊等情況,服務器抗不住)

  概念性的東西暫就不說了,說多了都是故事。現在我們來談談各種緩存。

  初學.NET的朋友開始就會接觸到DataSet類,云里霧里的看著DataSet的例子程序,也不管是咋回事,用就是了。其實DataSet就是緩存,當我們去讀取一段數據集合的時候,如果每讀取一條數據就處理一條的話,那么我們的程序和數據庫會一直連接著。假如處理一條數據的耗時可以忽略不計,或者只有你一個人使用這個數據庫的話,那么數據庫一直連著也無所謂,我們寫代碼完全可以不用DataSet類。但是事實上不耗時不可能的,如果耗時嚴重的話,就會一直占用這數據庫連接,直到我們處理完畢。如果這種查詢過多,連接數就會占用過多,而且數據庫在某些操作時會鎖住表,這就會造成其他的請求等待,會出現查詢超時,程序異常等現象。所以,我們必須先把數據拿出來,再對這些數據進行相關的處理,盡早的關閉數據庫連接,好讓數據庫處理其他的請求。 所以,適時地選用DataSet或DataReader是比較重要的(說明:DataReader就是hold住連接的讀取方式)。

  你可能會迷惑,不知不覺中使用了緩存(DataSet),這都是.NET幫你完成的事??墒牵憧赡苓€是不太清楚該如何使用緩存,或者說何時使用緩存。不用著急,我們一一來看。

  上面說過,我們緩存的數據無非就是一些數據庫的查詢、計算結果和頻繁查詢。那么,我們在實際開發中會碰到哪些這種數據呢? 其實仔細想想這是非常常見的,比如用戶登錄后的個人資料,當他每次點擊連接后造成頁面刷新,我們總不能都要去重新查詢數據庫吧?我們常常用Session來存儲這個人的信息,當他退出系統后我們把Session清理掉,所以Session也是緩存,只不過他也是.NET給我們提供好的類,sorry,我又舉了一個你不想看到的例子,哈哈。其實Session是私有化的數據,Session的數據訪問必須通過SessionID(詳情我就不多言了,大家google下),還不足以說明緩存的意義。如果把這個問題延伸下去,假如我們開發的是一個多用戶的Blog系統, 每當我們訪問其中一個博客時都要去查詢這個博主的資料,假如A和B同時訪問一個博客時,最理想的狀態就是只查詢一次,而不是兩個人都去訪問數據庫!是不是呢?其實。。。是也不是!(故事里的事,說是就是,不是也是;說不是就不是,是也不是。 :)。之所以說不是,是因為假如我們的博客網站每天就幾個人訪問,而且一直發展不起來,我們就沒必要用緩存,因為使用緩存帶來了更多的開發復雜度,因為每當我們去更新博主的資料的時候不單單要更新數據庫的信息,我們還要去處理緩存。但是如果我們的博客訪問量非常大,就像博客園似的,如果再不緩存,那數據庫服務器早就Gameover了:),那么現在就來看怎么用緩存的吧。

  .NET Framework提供了現成的緩存類供我們使用,常見的是 System.Web.HttpRuntime.Cache。每當我們去執行 BlogDataProvier.GetBlogInfo()方法時(假定這個方法是我們獲取博主信息的方法,顧名思義嘛),需要在查詢之前先從緩存獲取數據,假如數據不存在的話,再去數據庫獲取,并且把得到的結果存入緩存,并且返回該結果既可。下面我把這個方法的偽代碼寫出來,好讓從來沒用過緩存的朋友大致了解一下。

public class SqlDataProvider
{
public static object GetBlogInfo(string username)
{
//這里是從數據庫獲取BlogInfo
return null;
}
}

public class BlogDataProvider
{
public static object GetBlogInfo(string username)
{
var cacheKey
= "Blog_" + username;
var blog
= CacheHelper.Get(cacheKey);
if (blog == null)
{
blog
= SqlDataProvider.GetBlogInfo(username);
CacheHelper.Set(cacheKey, blog);
}
return blog;
}
}
public class CacheHelper
{
public static object Get(string key)
{
return System.Web.HttpRuntime.Cache.Get(key);
}
public static void Set(string key, object value)
{
System.Web.HttpRuntime.Cache.Insert(key, value);
}
}

NET技術帶你走進緩存世界,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 67194免费入口 | 狠狠色丁香婷婷久久综合 | 国产熟妇无码一区二 | 香蕉久久一区二区三区啪啪 | 国产精品午夜福利在线观看 | 亚洲视频欧美在线专区 | 91嫩草私人成人亚洲影院 | 亚洲欧美日韩人成 | 永久精品视频无码一区 | 欧洲亚洲精品A片久久99果冻 | 做暧暧免费30秒体验 | 色多多污污版免费下载安装 | 国产精品99久久久久久AV蜜臀 | 2020久久精品永久免费 | 狼人大香伊蕉国产WWW亚洲 | 耻辱诊察室1一4集动漫在线观看 | 青柠在线观看视频在线高清 | 亚洲国产精品VA在线看黑人 | 国产精品麻豆a啊在线观看 国产精品麻豆AV | 美女网站免费久久久久久久 | A级毛片无码久久精品免费 a级毛片黄免费a级毛片 | 亚洲zooz人禽交xxxx | china野外18:19| 黄色大片久久 | 自拍 偷拍 亚洲 经典 | 日产久久视频 | 两个人的视频日本在线观看完整 | 国产在线伊人 | 欧美日韩午夜群交多人轮换 | 亚洲国产在线精品国偷产拍 | 亚洲精品另类有吗中文字幕 | 免费国产成人手机在线观看 | 2022国产91精品久久久久久 | 竹菊精品久久久久久久99蜜桃 | 久久久精品久久久久三级 | 嫩草影院在线观看精品 | 亚洲H成年动漫在线观看不卡 | 极品少妇粉嫩小泬啪啪AV | 公粗挺进了我的密道在线播放贝壳 | 国产性夜夜性夜夜爽91 | 久久精品视频在线看99 |