.net資料快取
l如果每次進入頁面的時候都查詢資料庫生成頁面內容的話,如果訪問量非常大,則網站效能會非常差。而如果只有第一次訪問的時候才查詢資料庫生成頁面內容,以後都直接輸出內容,則能提高系統效能。這樣無論有多少人訪問都只訪問一次資料庫,資料庫壓力不變。
l快取(Cache)是一種用空間換取時間的技術,存在於計算機中很多地方,用來將一些慢速裝置中的常用資料儲存在快速裝置中,取資料的時候直接從快速裝置中取。比如CPU二級快取、記憶體、windows檔案讀取快取。
l快取存在失效的問題:為了保證從快取中讀取資料和慢速資料(資料庫)中資料一致,則需要在慢速資料(資料庫)中對應的資料發生變化的時候,清除快取中相應的資料。
l快取是改進網站效能的第一個手段,就像索引是改進資料庫效能的第一個手段一樣。ASP.net快取主要分為:頁面快取(中庸)、資料來源快取(最不靈活的)、資料快取(靈活)這三種主要型別。
頁面快取:
l給頁面新增<%@ OutputCache Duration=“15” VaryByParam=“none”%>標籤就可以啟用頁面快取,這樣整個頁面的內容都會被快取,頁面中的ASP.Net程式碼、資料來源在快取期間都不會被執行,而是直接輸出快取的頁面內容。 Duration表示快取時間,以秒為單位,超過這個時間則快取失效,再次生成以後會再快取15秒,以此類推。在Page_Load處設定斷點、修改資料庫資料測試。這個快取是在伺服器快取的,不是在客戶端,因為用HttpWatch還是能看到向伺服器提交的請求的,只不過伺服器看到有快取就沒有再執行頁面類。一般只有看帖、看新聞、看視訊的頁面才快取,CUD的頁面沒必要快取。
l快取是針對所有這個頁面的訪問者。這樣1個訪問者和1萬個訪問者、一次訪問和100萬次訪問對資料庫的壓力是一樣的。
l對於看新聞頁面來講,如果如上設定的話,則會快取在第一個看到的新聞,因為?id=2、?id=3只是頁面的不同引數而已,為了能讓不同的新聞各自快取,因此可以設定VaryByParam=“id”,表示對於相同頁面的不同的id引數進行單獨快取。如果有多個確定快取的引數,則將引數名用分號隔開即可,比如VaryByParam=“id;number”。測試。快取可能會有過期資料的問題,因此根據需求選用。
l如果想讓任何不同的查詢字串都建立不同的快取,則設定VaryByParam="*",一般情況下設定“*”就足夠。
l在WebUserControl中也可以像頁面快取一樣設定控制元件的快取。
資料來源快取:
l設定ObjectDataSource的CacheDuration(快取時間:秒),EnableCaching=true。這樣每隔CacheDuration指定的時間段才呼叫SelectMethod指定的方法來執行資料庫查詢,其他時候都是直接返回快取的資料。取資料的過程快取,在快取期間,繫結控制元件向ObjectDataSource要資料, ObjectDataSource直接將快取的資料返回給控制元件,不再去向TypeName指向的類要資料。
快取依賴:
依賴於檔案內容
CacheDependency cDep = new CacheDependency(filePath);
System.Web.Caching.CacheDependency cDep = new System.Web.Caching.CacheDependency(filePath);
Cache.Add("fmsg", msg, cDep, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, RemovedCallback);
依賴於資料庫內容(輪詢機制/通知機制)
一:輪詢機制 –fw主動到資料庫檢查資料是否改變
1.使用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727中的aspnet_regsql.exe:
註冊:aspnet_regsql -S . -E -ed -d 資料庫名 -et -t 表名
刪除:aspnet_regsql -S . -E -d 資料庫名 -dt -t 表名
取消資料庫快取依賴: aspnet_regsql -S . -E -dd 資料庫名
資料庫名 列出已登錄檔:aspnet_regsql -S . -E -d 資料庫名 -lt
2.配置web.config
3.資料庫依賴物件
SqlCacheDependency cDep =
new SqlCacheDependency("GSSMS", "Students");
1.aspnet_regsql -S . -E(整合登陸)/-U sa -P 123 -ed(啟動/-dd關閉) -d(資料庫名) GSSMS -et(指定快取依賴的表名/-dt禁用表名) -t(表名) Aticle
2.依賴於資料庫的web.config配置
<system.web>
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add name="GSSMS" connectionStringName="conStr2" pollTime="15000"/>
</databases>
</sqlCacheDependency>
</caching>
相關文章
- .NET 快取快取
- .Net Core快取元件(MemoryCache)【快取篇(二)】快取元件
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 清除 Nuxt 資料快取:clearNuxtDataUX快取
- Web快取知多少(快取機制和資料儲存)Web快取
- .NET Core ResponseCache【快取篇(一)】快取
- 【UniApp】-uni-app-資料快取APP快取
- 報表資料的可控快取快取
- Python操作Redis快取資料庫PythonRedis快取資料庫
- 清除 Electron 中的快取資料快取
- 前端快取API請求資料前端快取API
- 微信清除快取資料方法快取
- ASP.NET Core - 快取之分散式快取ASP.NET快取分散式
- ASP.NET Core 中的快取ASP.NET快取
- .NET 9中新快取HybridCache快取
- 分散式快取--快取與資料庫一致性方案分散式快取資料庫
- ASP.NET Core - 快取之記憶體快取(下)ASP.NET快取記憶體
- ASP.NET Core - 快取之記憶體快取(上)ASP.NET快取記憶體
- .net 溫故知新【14】:Asp.Net Core WebAPI 快取ASP.NETWebAPI快取
- [20181119]firefox更改快取資料夾.txtFirefox快取
- Redis快取資料庫-快速入門Redis快取資料庫
- 從 0 學習 Spring 快取資料Spring快取
- .Net Core快取元件(MemoryCache)原始碼解析快取元件原始碼
- 使用.Net中MediatR快取管道行為快取
- Redis快取穿透、擊穿、雪崩,資料庫與快取一致性Redis快取穿透資料庫
- 究竟先操作快取,還是資料庫?快取資料庫
- SpringBoot 實戰 (十一) | 整合資料快取 CacheSpring Boot快取
- Redis中快取二進位制資料Redis快取
- MYSQL---SQL語句的資料快取MySql快取
- Redis 入門與 ASP.NET Core 快取RedisASP.NET快取
- 分散式快取--快取與資料庫強一致場景下的方案分散式快取資料庫
- Asp.Net Core webapi+net6 使用資源篩選器(過濾器) 做快取ASP.NETWebAPI過濾器快取
- 阿里一面:關於【快取穿透、快取擊穿、快取雪崩、熱點資料失效】問題的解決方案阿里快取穿透
- 使用Redis和Java進行資料庫快取 - DZone資料庫RedisJava資料庫快取
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- PB級資料持久化快取系統——lest持久化快取
- 用於Electron/Nodejs的資料持久快取庫NodeJS快取
- 快取與資料庫一致性快取資料庫
- Vue SSR服務端渲染之資料快取Vue服務端快取