我用ASP.NET緩衝之SQL資料緩衝依賴(SqlCacheDependency)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   使用   strong   ar   

【名詞解釋】

緩衝(Cache)依賴,大白話解釋就是緩衝是否更新依賴於其它Object。那麼SqlCacheDependency指的就是Cache的資料更新依賴於SQL Server資料庫表的變化( 行層級更改)或者SQL 查詢結果的變化。

以前也總結過緩衝的使用

網頁輸出快取:我用ASP.NET緩衝之OutputCache

資料緩衝:我用ASP.NET緩衝之資料緩衝

但是對緩衝依賴還是很模糊,前陣子有幸在項目中實際運用了此類。現在結合自己的實際以及和網上大牛的經驗,給大家分享一下。

【使用背景】

首先你必須用ASP.Net和SQL Server開發應用,也就是SqlCacheDependency是基於微軟的那套體制。同學,如果你不是從事Net開發,先給個贊再Skip吧。

緩衝是用來提高應用效能,降低伺服器壓力。適用於資料不易變,資料易通用的情景, 對於動態查詢資料,例如資料分析,最好放棄使用緩衝。

【My Code】

SqlCacheDependency通俗的說利用SQL Server的通訊機制,當資料表發生變化時,通知應用程式時刪除原有的緩衝,更新新的資料。

首先需要檢查SqlServer是否啟用Service Broker。

Select DATABASEpRoPERTYEX(‘資料庫名稱‘,‘IsBrokerEnabled‘)          -- 1 表示已經啟用 0 表示沒有啟用

啟用語句

 ALTER DATABASE 資料庫名稱 SET ENABLE_BROKER;    

運行啟用語句,會出現假死情況,不要緊,停止查詢,重新查詢一次就可以。

上面這些來自於網上的一些經驗,個人在實際中並沒有出現這些情況,狀態=0 ,仍然可以使用。我用的是SQL Serve2008,個人覺得高版本的Sql Server 已經不在將這些作為必須條件(個人觀點,不同意見,歡迎討論)。畢竟Net開發走的是一條傻瓜化編程道路。

接下來就是設定資料庫快取通知。兩種方法(MSDN),個人建議採用第二種。

第一種利用aspnet_regsql.exe(位於Windows\Microsoft.NET\Framework\[版本]檔案夾中) 工具設定資料庫和表開啟快取通知功能。你只需要記住如下命令就能開啟:

aspnet_regsql -S localhost -E -d RWWW -ed -t Options -et

每個命令代表什麼含義,網上有詳細的解釋。有興趣的同學可以去瞭解。運行命令後,配置就可以。這裡特別需要注意大小寫,筆者在開發中就將表名全部弄成大寫,結果花了一個小時的時間,程式始終運行不起來,一直在報錯,提示沒有為SQL快取通知啟用資料庫。結果最後才發現大小寫不對。

第二種就是利用SqlCacheDependencyAdmin類

SqlCacheDependencyAdmin.EnableNotifications(connectionString);     //啟動資料庫的資料緩衝依賴功能                    

SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, table);        //啟用資料表緩衝

將此兩行代碼放入Global中Start方法中即可。

接下來配置設定檔。

<caching>
      <!--啟動緩衝依賴,每5秒輪詢一次-->
      <sqlCacheDependency enabled="true" pollTime="5000">
        <databases>
          <add name="WWWAccount" connectionStringName="ConnectionString" pollTime="5000"/>
        </databases>
      </sqlCacheDependency>
    </caching>

 這裡基本就是固定格式,必須這樣配置才可以。

最後將緩衝加入代碼中即可,廢話不多說,直接上代碼。開發中用到了EF的東東。 

//判斷是否已緩衝                if (System.Web.HttpContext.Current.Cache["Link"] == null)                {                    //如果沒有緩衝 重新擷取資料                    var links = db.WWW_Link.AsQueryable();                    //添加到緩衝中                    System.Web.HttpContext.Current.Cache.Insert(                        "Link",                        links,                        new SqlCacheDependency("WWWAccount", "WWW_Link")                        );                    //返回資料                    return links;                }                //如果已經緩衝 返回快取資料                return System.Web.HttpContext.Current.Cache["Link"] as IQueryable<WWW_Link>;

當表WWW_Link發生變化時,Cache["Link"]會自動更新。這裡主意SqlCacheDependency 的第一個參數,它等於App.config中節點name=WWWAccount。

 

 

我用ASP.NET緩衝之SQL資料緩衝依賴(SqlCacheDependency)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.