1. 程式人生 > >快取依賴(檔案、資料庫)

快取依賴(檔案、資料庫)

前言

快取的基本用法介紹:我推薦看下  asp.net快取 。

本篇,我主要寫下一般sql的快取依賴,還有使用Mvc過濾器的資料庫快取依賴。

什麼是快取依賴

1.快取:是把你要訪問的資源,放在記憶體中,佔用一定的記憶體空間,從而是使用者讀取記憶體中的資料,進而減少讀取資料庫,或資原始檔的次數,從而對你的程式併發量,以及返回請求速率上得到提高的一種機制。

2.快取的不及時性:由於在快取的作用時間內,資料放在記憶體中,不知道資料來源是否已經改變,從而是資訊失去即時效應。

3.解決不及時性:為啦解決第二條的不及時性,微軟想到的就是快取依賴

4.快取依賴:就是快取通過監測依賴項(檔案或資料庫)的讀寫,來通知快取是否過期的一種機制。比如,依賴項是123.txt檔案,快取的資料是234.txt中的資料,那麼快取機制可通過監測123.txt檔案中資料的是否變化,來移除快取234.txt檔案的資料。感覺扯淡,還是上程式碼更給力。

快取依賴項(檔案)

            //檔案快取依賴
            if (cache.Get("key") == null)//如果依賴項中的資料發生變化,此會被通知快取清空(系統完成清空)
            {
                CacheDependency dp = new CacheDependency(Server.MapPath("/Data/123.txt"));//建立快取依賴項dp
                string str = DoIOFile.ReadFiles("/Data/111.txt");
                cache.Insert(
"key", str, dp); } Response.Write(cache.Get("key")); //如果123.txt這個檔案的內容不變就一直讀取快取中的資料,一旦123.txt檔案中的資料改變裡面重新讀取111.txt檔案中的資料

效果:快取的資料是111.txt中的資料,111.txt中的資料發生變化,鑰匙為key的快取不會被清空,也就是依舊顯示沒改前的資料。但是如果快取依賴項123.txt中的資料一旦發生變化,快取立馬被清空,重新寫入快取中新的資料。這就是快取依賴的好處,你可以試下,我不忽悠你。

快取依賴項(資料夾)

            //
資料夾快取依賴 if (cache.Get("key") == null)//如果依賴項中的資料發生變化,此會被通知快取清空(系統完成清空) { CacheDependency dp = new CacheDependency(Server.MapPath("/Data"));//建立快取依賴項dp string str = DoIOFile.ReadFiles("111.txt"); cache.Insert("key", str, dp); } Response.Write(cache.Get("key")); //如果123.txt這個檔案的內容不變就一直讀取快取中的資料,一旦123.txt檔案中的資料改變裡面重新讀取111.txt檔案中的資料

效果:這裡/Data是個資料夾,他下面直屬Data所有一級檔案(就是不能算巢狀資料夾的檔案)如果有變動,都會觸發通知,清空快取。

快取依賴項(多檔案)

            //多檔案依賴項
            if (cache.Get("key") == null)//如果依賴項中的資料發生變化,此會被通知快取清空(系統完成清空)
            {
                CacheDependency dp1 = new CacheDependency(Server.MapPath("/Data/123/123.txt")); //這裡是監視檔案或目錄
                CacheDependency dp2 = new CacheDependency(Server.MapPath("/Data/123.txt"));

                CacheDependency[] dps = new CacheDependency[] { dp1, dp2 };
                AggregateCacheDependency aDp = new AggregateCacheDependency(); //多個依賴項
                aDp.Add(dps);
                string str = DoIOFile.ReadFiles("111.txt");
                cache.Insert("key", str, aDp);
            }
            Response.Write(cache.Get("key"));  

效果:依賴項中的任何一個檔案有變動,快取清空,寫入新快取。

Mvc中的快取

mvc中快取的使用方法相對來說比較簡單,只用在過濾器上定義一下就行啦,其它的我就不累述啦,與webForm無異。

        [OutputCache(Duration = 20)] //定義快取,秒為單位,Duration是必填項
        public ActionResult Index()
        {
            string str = DoIOFile.ReadFiles("/111.txt");
            Response.Write(str);
            return View();
        }

具體配置詳見:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.outputcacheattribute.aspx

快取依賴(資料庫表)

這個多少有點繁瑣,跟著做。

1.開啟專案配置檔案

 <connectionStrings>     
    <add name="Am_WeixinWeb" connectionString="data source=192.168.1.200;initial catalog=Am_WeixinWeb;uid=sa;password=lh1234;"  />
  </connectionStrings>
<system.web>
    <caching>
      <sqlCacheDependency enabled="true" pollTime="2000">
        <databases>
          <add name="Test" connectionStringName="Am_WeixinWeb" />
        </databases>
      </sqlCacheDependency>
    </caching>

註記:pollTime,毫秒為單位,意識是每隔2秒檢測下資料庫,檢測表是否有發生變化。connectionStringName為資料庫連結字串。

2.啟動資料庫快取依賴

在C盤中,搜尋到工具aspnet_regsql.exe

在命令中 cd:執行到此工具的檔案下,鍵入下面命令

aspnet_regsql -C "data source=;initial catalog=codematic;user id=sa;password=" -ed -et -t "T_table"  

      

引數:-c 後跟連線字串,-t後接建立快取依賴的表名

工具命令引數列表詳見:http://msdn.microsoft.com/zh-cn/library/ms229862

3.使用快取依賴項

            //sql快取依賴
            DataSet ds = new DataSet();
            if (cache.Get("key") == null)
            {
                string conStr = DoXml.ReadWebConfigConnectionStrings("Am_WeixinWeb");
                SqlConnection conn = new SqlConnection(conStr);
                string sql = "select top(1) recContent from Am_recProScheme";
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);

                sda.Fill(ds, "tb1");
                SqlCacheDependency dep = new SqlCacheDependency("Test", "Am_recProScheme");  //Test對應配置項的快取配置key ,後面是資料庫表名
                cache.Insert("key", ds.Tables["tb1"].Rows[0]["recContent"].ToString(), dep);
            }
            Response.Write(cache.Get("key"));

效果:資料庫Am_WeixinWeb中表Am_recProScheme中的資料有所變動,則清空快取,重新寫入。

Mvc過濾器中配置快取依賴(資料庫)

1.開啟專案配置檔案

 <connectionStrings>    
    <add name="Am_WeixinWeb" connectionString="data source=192.168.1.200;initial catalog=Am_WeixinWeb;uid=sa;password=lh1234;"  />
  </connectionStrings>
 <caching>
      <sqlCacheDependency enabled="true" pollTime="2000">
        <databases>
          <add name="Test" connectionStringName="Am_WeixinWeb" />
        </databases>
      </sqlCacheDependency>
    </caching>

註記:pollTime,毫秒為單位,意識是每隔2秒檢測下資料庫,檢測表是否有發生變化。connectionStringName為資料庫連結字串。

2.配置過濾器 

        //mvc快取依賴
        [OutputCache(Duration = 20, SqlDependency = "Test:Am_recProScheme")] //Test:為快取配置的key,後面跟的是快取依賴表
        public ActionResult Index()
        {           
            Response.Write(db.Am_recProScheme.FirstOrDefault().recContent);
            return View();
        }

效果:資料庫Am_WeixinWeb中表Am_recProScheme中的資料有所變動,則清空快取,重新寫入。

本文以實用簡略為主,如有探討,可加左上方技術交流群,謝謝閱讀,願能給你一點點幫助。

相關推薦

快取依賴檔案資料庫

前言 快取的基本用法介紹:我推薦看下  asp.net快取 。 本篇,我主要寫下一般sql的快取依賴,還有使用Mvc過濾器的資料庫快取依賴。 什麼是快取依賴 1.快取:是把你要訪問的資源,放在記憶體中,佔用一定的記憶體空間,從而是使用者讀取記憶體中的資料,進而減少讀取資料庫,或資原始檔的次數,從而對你

使用 SQL 快取依賴項,資料庫快取依賴 附例項

使用 SQL 快取依賴項 最簡單的快取策略就是使快取資料在一個指定的時間週期後過期。但是這個簡單的方法意味著快取資料沒有保持與底層資料來源的聯絡,從而導致過期資料長時儲存或當前資料很快過期。更好的方法是使用 SqlCacheDependency 類,這樣資料一直被快取,直

android中圖片的三級cache策略記憶體檔案網路之二:記憶體快取策略

前言 記得很久之前我寫了一篇banner的文章,好多朋友找我要程式碼,並要我開放banner中使用的圖片管理工廠-ImageManager。如果想很好地理解下面的故事,請參看我半年前寫的兩篇博文:android中圖片的三級cache策略(記憶體、檔案、網路) 一 和 an

ASP.NET快取資料庫快取依賴

        先說一下背景,做訂餐系統的時候我們負責的是“廚師檢視取餐情況”這個看著沒什麼、其實也沒什麼,亮點就是實時重新整理、頁面要和資料庫中的資料保持一致;週期性訪問資料庫是一個方法但是我們不打

網路配置基礎檔案及命令

  Linux主機要與網路中其他主機進行通訊,首先要進行正確的網路配置。網路配置通常包括主機名、IP地址、子網掩碼、預設閘道器、DNS伺服器等。 常見網路配置檔案 TCP/IP網路的配置資訊是分別儲存在不同的配置檔案中的,相關配置檔案有/etc/sysconfig/network,網

【轉】【Redis】分散式鎖的幾種使用方式rediszookeeper資料庫

https://blog.csdn.net/u010963948/article/details/79006572?utm_source=blogxgwz9 https://blog.csdn.net/qq_37606901/article/details/79569250?utm_source

python實現將某程式碼檔案複製/移動到指定路徑下 檔案資料夾的移動複製刪除重新命名

    用python實現將某程式碼檔案複製/移動到指定路徑下。 場景例如:mv ./xxx/git/project1/test.sh ./xxx/tmp/tmp/1/test.sh (相對路徑./xxx/tmp/tmp/1/不一定存在)   # -

Servlet | 訪問不同格式檔案PDFdoc

   核心程式碼 //設定響應內容型別為PDF型別 response.setContentType("application/pdf"); request.getRequestDispatcher("/WEB-INF/搜尋框架.pdf").

資料庫策略單機叢集

一、單機資料庫策略       硬體資源相對於使用者的體驗是成本比較高的;資料庫的硬碟儲存空間非常珍貴       滿足正規化的設計原則:            

Linux命令之檢視日誌等實時檔案命令less tail使用

一、less的使用 1)less  檔名,即可快速開啟檔案 2)相關檢視搜尋 3)利用鍵盤向上向下箭頭鍵盤上的向上和向下箭頭,點選一次向下簡單,檔案內容往下讀取一行;點選一次向上箭頭,檔案內容,往上翻滾一行。 4)page down 和page up利用鍵盤的page down 和page

JS 檔案讀取的進度條顯示方法FileReaderonprogress——20181116

這裡FileReader只是從磁碟把檔案讀取到瀏覽器,並沒有傳送到伺服器。參考連結1       參考連結2 <!DOCTYPE html> <html > <head> <meta charset="UTF-8"

通用的webServiceCXFAxis呼叫工具類無強制依賴

要支援Axis需要這麼幾個不常見的依賴: <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId>

linux上zabbix-server優化配置檔案資料庫

linux上zabbix-server優化(配置檔案和資料庫) 一、:修改配置檔案       vim /usr/local/zabbix/etc/zabbix_server.conf        Timeout=20 &

PHP檔案包含漏洞攻防實戰allow_url_fopenopen_basedir

摘要 PHP是一種非常流行的Web開發語言,網際網路上的許多Web應用都是利用PHP開發的。而在利用PHP開發的Web應用中,PHP檔案包含漏洞是一種常見的漏洞。利用PHP檔案包含漏洞入侵網站也是主流的一種攻擊手段。本文對PHP檔案包含漏洞的形成、利用技巧及防範進行了詳細的

分散式鎖的幾種使用方式rediszookeeper資料庫

Q:一個業務伺服器,一個數據庫,操作:查詢使用者當前餘額,扣除當前餘額的3%作為手續費 synchronized lock db lock Q:兩個業務伺服器,一個數據庫,操作:查詢使用者當前餘額,扣除當前餘額的3%作為手續費 分散式鎖

基於Bootstrap的多圖片檔案也可以上傳預覽刪除縮放進度...顯示

一、引用js、css 二、Html程式碼 <input id="myFile" type="file" name="myFile" multiple class="file-loading

html檔案中flash格式flvswf檔案的嵌入

  flash檔案的格式:.FLV 和 .SWF flash視訊格式有兩種副檔名可以使用:.flv和.swf。他們有什麼不同呢? (1)一個.flv檔案(flash視訊)是基於圖片的視訊流和音訊。如果你在執行一個流服務,flv將是一個好的選擇。上游條件是,這個檔案的任何部分

golang基礎-模板渲染終端瀏覽器渲染輸出檔案自定義io.Writer渲染

模板渲染終端 1)替換 {{.欄位名}} demo.go package main import ( "fmt" "os" "text/template" ) type Person struct { Name s

資料庫 連線池緩衝池定義原理

資料庫連線池的基本思想就是為資料庫連線建立一個“緩衝池”。預先在緩衝池中放入一定數量的連線,當需要建立資料庫連線時,只需要從緩衝池中取出一個了,使用完畢後再放回去。我們可以通過設定連線池最大數來防止系統無盡的與資料庫連線。更為重要的是我們可以通過連線池的管

資料庫原理 SQLDDLDML

DROP TABLEdept;CREATE TABLE dept (deptnoNUMBER(2) CONSTRAINTPK_DEPT PRIMARYKEY,    dnameVARCHAR2(14) ,    locVARCHAR2(13) ) ;DROP TABLEemp;CREATE T