一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

帶你走進(jìn)緩存世界

  我們搞程序的多多少少都了解點(diǎn)算法。總體來(lái)講,算法是什么?算法就是“時(shí)間”和“空間”的互換策略。我們常常考究一個(gè)算法的時(shí)間復(fù)雜度或空間復(fù)雜度,如果我們有絕對(duì)足夠的時(shí)間或空間,那么算法就不需要了,可惜這種條件是不存在的,只是在某些情況下相對(duì)來(lái)說(shuō)我們不用去考慮其中一個(gè)。今天我們討論的“緩存”,自然就是“用空間換時(shí)間”的算法。 緩存就是把一些數(shù)據(jù)暫時(shí)存放于某些地方,可能是內(nèi)存,也有可能硬盤(pán)。總之,目的就是為了避免某些耗時(shí)的操作。我們常見(jiàn)的耗時(shí)的操作,比如數(shù)據(jù)庫(kù)的查詢、一些數(shù)據(jù)的計(jì)算結(jié)果,或者是為了減輕服務(wù)器的壓力。其實(shí)減輕壓力也是因查詢或計(jì)算,雖然短耗時(shí),但操作很頻繁,累加起來(lái)也很長(zhǎng),造成嚴(yán)重排隊(duì)等情況,服務(wù)器抗不住)

  概念性的東西暫就不說(shuō)了,說(shuō)多了都是故事。現(xiàn)在我們來(lái)談?wù)劯鞣N緩存。

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

  你可能會(huì)迷惑,不知不覺(jué)中使用了緩存(DataSet),這都是.NET幫你完成的事。可是,你可能還是不太清楚該如何使用緩存,或者說(shuō)何時(shí)使用緩存。不用著急,我們一一來(lái)看。

  上面說(shuō)過(guò),我們緩存的數(shù)據(jù)無(wú)非就是一些數(shù)據(jù)庫(kù)的查詢、計(jì)算結(jié)果和頻繁查詢。那么,我們?cè)趯?shí)際開(kāi)發(fā)中會(huì)碰到哪些這種數(shù)據(jù)呢? 其實(shí)仔細(xì)想想這是非常常見(jiàn)的,比如用戶登錄后的個(gè)人資料,當(dāng)他每次點(diǎn)擊連接后造成頁(yè)面刷新,我們總不能都要去重新查詢數(shù)據(jù)庫(kù)吧?我們常常用Session來(lái)存儲(chǔ)這個(gè)人的信息,當(dāng)他退出系統(tǒng)后我們把Session清理掉,所以Session也是緩存,只不過(guò)他也是.NET給我們提供好的類,sorry,我又舉了一個(gè)你不想看到的例子,哈哈。其實(shí)Session是私有化的數(shù)據(jù),Session的數(shù)據(jù)訪問(wèn)必須通過(guò)SessionID(詳情我就不多言了,大家google下),還不足以說(shuō)明緩存的意義。如果把這個(gè)問(wèn)題延伸下去,假如我們開(kāi)發(fā)的是一個(gè)多用戶的Blog系統(tǒng), 每當(dāng)我們?cè)L問(wèn)其中一個(gè)博客時(shí)都要去查詢這個(gè)博主的資料,假如A和B同時(shí)訪問(wèn)一個(gè)博客時(shí),最理想的狀態(tài)就是只查詢一次,而不是兩個(gè)人都去訪問(wèn)數(shù)據(jù)庫(kù)!是不是呢?其實(shí)。。。是也不是!(故事里的事,說(shuō)是就是,不是也是;說(shuō)不是就不是,是也不是。 :)。之所以說(shuō)不是,是因?yàn)榧偃缥覀兊牟┛途W(wǎng)站每天就幾個(gè)人訪問(wèn),而且一直發(fā)展不起來(lái),我們就沒(méi)必要用緩存,因?yàn)槭褂镁彺鎺?lái)了更多的開(kāi)發(fā)復(fù)雜度,因?yàn)槊慨?dāng)我們?nèi)ジ虏┲鞯馁Y料的時(shí)候不單單要更新數(shù)據(jù)庫(kù)的信息,我們還要去處理緩存。但是如果我們的博客訪問(wèn)量非常大,就像博客園似的,如果再不緩存,那數(shù)據(jù)庫(kù)服務(wù)器早就Gameover了:),那么現(xiàn)在就來(lái)看怎么用緩存的吧。

  .NET Framework提供了現(xiàn)成的緩存類供我們使用,常見(jiàn)的是 System.Web.HttpRuntime.Cache。每當(dāng)我們?nèi)?zhí)行 BlogDataProvier.GetBlogInfo()方法時(shí)(假定這個(gè)方法是我們獲取博主信息的方法,顧名思義嘛),需要在查詢之前先從緩存獲取數(shù)據(jù),假如數(shù)據(jù)不存在的話,再去數(shù)據(jù)庫(kù)獲取,并且把得到的結(jié)果存入緩存,并且返回該結(jié)果既可。下面我把這個(gè)方法的偽代碼寫(xiě)出來(lái),好讓從來(lái)沒(méi)用過(guò)緩存的朋友大致了解一下。

public class SqlDataProvider
{
public static object GetBlogInfo(string username)
{
//這里是從數(shù)據(jù)庫(kù)獲取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技術(shù)帶你走進(jìn)緩存世界,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产欧美日韩综合精品一区二区三区 | 国产精品女同一区二区久久 | 91精品免费久久久久久久久 | 在线看小视频 | 免费观看一区二区 | 91福利小视频| 色视频观看| 国内精品久久久久久野外 | 美女下面网站 | 美女激情网 | 国产成人在线观看网站 | 操一炮在线 | 欧美成人综合在线观看视频 | 国产精品欧美在线 | 美女毛片在线 | 亚洲美女色视频 | 伊人国产在线播放 | 白嫩美女一级毛片免费看 | 一区二区在线免费视频 | 黄视频在线观看免费 | 国产亚洲精品sese在线播放 | 亚洲激情视频在线 | 国产精品2020在线看亚瑟 | 性感美女一级毛片 | 亚洲国产精品久久网午夜 | 成年视频在线 | 欧美人人做人人爽人人喊 | 国产一级特黄一级毛片 | 激情视频小说图片 | 337p人体 欧洲人体 亚 | h片视频在线观看 | 久久夜色精品国产噜噜亚洲a | 天天激情| 欧美精品色视频 | 亚洲精品午夜aaa级久久久久 | 麻豆国产一区 | 国产成人综合精品 | 日韩一区在线播放 | 日本免费一区二区三区视频 | 亚洲伦理一区二区 | 一本色道久久综合一区 |