第三篇 Entity Framework Plus 之 Query Cache

   離上一篇博客,快一週,工做太忙,只能利用休息日來寫一些跟你們分享,Entity Framework Plus 組件系列文章,以前已經寫過兩篇html

第一篇 Entity Framework Plus 之 Auditgit

第二篇 Entity Framework Plus 之 Query Futuregithub

計劃還會寫兩篇,一篇是關於查詢緩存的(二級緩存),一篇是批量操做(只講更新,刪除)。數據庫

   今天寫查詢緩存,標題 第三篇 Entity Framework Plus 之 Query Cache  ,廢話很少說,直接實做。緩存

一. 代碼實現ide

   1.  解決方案仍是前兩篇的用的 「EntityFrameworkPlusSolution」 解決方案,在「01.Demo」 解決方案文件夾,新增「EntityFrameworkPlus.QueryCache.Demo」 Windows 項目(爲何要用Windows 項目,方便Demo和測試而已。)post

 2. 「EntityFrameworkPlus.QueryCache.Demo」 項目中,刪除原來Form1 窗口相關文件,分別新增「QueryCache」 後,「NoExpirationQueryCache」,「AbsoluteExpirationQueryCache」,「SlidingExpirationQueryCache」 窗口,界面設計分別以下圖。測試

  QueryCacheurl

NoExpirationQueryCachespa

AbsoluteExpirationQueryCache

SlidingExpirationQueryCache

四個界面很簡單,這裏大概介紹一下, 

QueryCache 就像操做臺同樣,是其餘三個界面入口點。

NoExpirationQueryCache 不作緩存過時時間設置查詢緩存

AbsoluteExpirationQueryCache 指定緩存過時時間(以秒爲單位) 設置查詢緩存

SlidingExpirationQueryCache 最後一次訪問緩存時間間隔(以秒爲單位) 設置查詢緩存

3. 代碼

QueryCache 

using System; using System.Windows.Forms; namespace EntityFrameworkPlus.QueryCache.Demo { public partial class QueryCache : Form { public QueryCache() { InitializeComponent(); } private void btnNoExpirationQueryCache_Click(object sender, EventArgs e) { new NoExpirationQueryCache().ShowDialog(); } private void btnAbsoluteExpirationQueryCache_Click(object sender, EventArgs e) { new AbsoluteExpirationQueryCache().ShowDialog(); } private void btnSlidingExpirationQueryCache_Click(object sender, EventArgs e) { new SlidingExpirationQueryCache().ShowDialog(); } } }
View Code

NoExpirationQueryCache 

 1 using System;  2 using System.Windows.Forms;  3 using EntityFrameworkPlus.DbContext;  4 using Z.EntityFramework.Plus;  5 
 6 namespace EntityFrameworkPlus.QueryCache.Demo  7 {  8     public partial class NoExpirationQueryCache : Form  9  { 10         public NoExpirationQueryCache() 11  { 12  InitializeComponent(); 13  } 14 
15         private void btnSearch_Click(object sender, EventArgs e) 16  { 17             using (var db = new EntityFrameworkPlusDbContext()) 18  { 19                 var orders = db.Goodses.FromCache(); 20                 dgList.DataSource = orders; 21  } 22  } 23  } 24 }
View Code

AbsoluteExpirationQueryCache 

 1 using System;  2 using System.Windows.Forms;  3 using EntityFrameworkPlus.DbContext;  4 using Z.EntityFramework.Plus;  5 
 6 namespace EntityFrameworkPlus.QueryCache.Demo  7 {  8     public partial class AbsoluteExpirationQueryCache : Form  9  { 10         public AbsoluteExpirationQueryCache() 11  { 12  InitializeComponent(); 13  } 14 
15         private void btnSearch_Click(object sender, EventArgs e) 16  { 17             using (var db = new EntityFrameworkPlusDbContext()) 18  { 19                 var second = Convert.ToDouble(txtAbsoluteExpiration.Text.Trim()); 20                 var absoluteExpirationSecond = DateTime.Now.AddSeconds(second); 21                 var orders = db.Goodses.FromCache(absoluteExpirationSecond); 22                 dgList.DataSource = orders; 23  } 24  } 25  } 26 }
View Code

SlidingExpirationQueryCache 

 1 using System;  2 using System.Runtime.Caching;  3 using System.Windows.Forms;  4 using EntityFrameworkPlus.DbContext;  5 using Z.EntityFramework.Plus;  6 
 7 namespace EntityFrameworkPlus.QueryCache.Demo  8 {  9     public partial class SlidingExpirationQueryCache : Form 10  { 11         public SlidingExpirationQueryCache() 12  { 13  InitializeComponent(); 14  } 15 
16         private void btnSearch_Click(object sender, EventArgs e) 17  { 18             using (var db = new EntityFrameworkPlusDbContext()) 19  { 20                 var second = Convert.ToDouble(txtSlidingExpiration.Text.Trim()); 21                 var options = new CacheItemPolicy() { SlidingExpiration = TimeSpan.FromSeconds(second) }; 22                 var orders = db.Goodses.FromCache(options); 23                 dgList.DataSource = orders; 24  } 25  } 26  } 27 }
View Code

代碼就不作解釋,等一下逐個測試一下給你們看,查詢的信息是上一篇第二篇 Entity Framework Plus 之 Query Future商品信息(Sample_Goods),查詢後會直接展現到DataGridView裏面。

二.測試效果(記得打開SQL Profiler 追蹤SQL)

NoExpirationQueryCache  不作緩存過時時間設置查詢緩存

1. 點擊查詢按鈕一次,Demo以下圖

2. 清空一下Sql Profiler 執行的SQL(這個應該不用我教你們都會),接着連續點擊查詢按鈕,Demo如圖

DataGridView 依舊會有數據展現出來,可是SQL Profiler 是沒有執行查詢商品信息的SQL,說明以後查詢是取緩存中的,若是緩存中存在,就不去執行SQL.

AbsoluteExpirationQueryCache 指定緩存過時時間(以秒爲單位) 設置查詢緩存 (每次Demo另一個場景,把程序關閉一次,避免Demo不會有問題。)

1. 設置緩存過時時間爲10秒,點一次查詢,Demo以下圖

 

2. 清空一下Sql Profiler 執行的SQL,而後在10範圍內,連續點查詢,Demo以下圖 

3. 過了10秒在點查詢按鈕,Demo 以下圖

從上面三種操做,說明10秒內,點擊查詢,商品信息,已經被緩存,就不會和數據庫進行交流,當過了10秒商品信息的緩存就會自動清除,從新到數據庫取數據。

 

SlidingExpirationQueryCache 最後一次訪問緩存時間間隔(以秒爲單位) 設置查詢緩存

1. 最後訪問緩存時間間隔設置10s ,點擊查詢,Demo以下圖

2. 清空一下Sql Profiler 執行的SQL,連續點擊查詢按鈕,只要最後一次訪問緩存不超過10s,Demo以下圖

3. 最後一次訪問緩存時間間隔晚於10s ,Demo以下圖

從上面三種操做來看,只要最後一次訪問緩存不超過設置時間間隔,即就不會和數據庫打交道,老是會取緩存數據,不然否則。

到此 Entity Framework Plus 之 Query Cache 就寫完,你們能夠更加深刻的瞭解 Entity Framework Plus Query Cache 能夠自行看源碼

Entity Framework Plus GitHub :https://github.com/zzzprojects/EntityFramework-Plus

本博文源代碼 :https://github.com/haibozhou1011/EntityFramework-PlusSample

相關文章
相關標籤/搜索