程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 通用緩存組件,緩存組件

通用緩存組件,緩存組件

編輯:C#入門知識

通用緩存組件,緩存組件


  緩存有很多種,用的最普遍的可能就是內存緩存了。內存緩存的實現方式也有很多種,比如用靜態變量,比如用Cache,但這些方式只針對單一緩存變量,每個緩存變量都要重新寫一套方法,無法實現通用。這裡提供一種通用的內存緩存組件,不用再為每個緩存做實現了。

  話不多說,先上代碼:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Reflection;
 5 using System.Text;
 6 using System.Web;
 7 using System.Web.Caching;
 8 
 9 namespace Loncin.CodeGroup10.Utility
10 {
11     /// <summary>
12     /// 通用緩存組件
13     /// </summary>
14     public class CacheHelper
15     {
16         /// <summary>
17         /// 獲取緩存對象
18         /// </summary>
19         /// <typeparam name="T">緩存實體對象</typeparam>
20         /// <param name="dele">實體數據獲取方法</param>
21         /// <param name="cacheKey">緩存關鍵字</param>
22         /// <param name="cacheDuration">緩存時間(分鐘)</param>
23         /// <param name="objs">實體數據獲取參數</param>
24         /// <returns>返回對象</returns>
25         public static T GetCacheData<T>(Delegate dele, string cacheKey, int cacheDuration, params object[] objs)
26         {
27             // 緩存為空
28             if (HttpRuntime.Cache.Get(cacheKey) == null)
29             {
30                 // 執行實體數據獲取方法
31                 MethodInfo methodInfo = dele.Method;
32 
33                 T result = (T)methodInfo.Invoke(dele.Target, objs);
34 
35                 if (result != null)
36                 {
37                     // 到期時間
38                     DateTime cacheTime = DateTime.Now.AddMinutes(cacheDuration);
39 
40                     // 添加入緩存
41                     HttpRuntime.Cache.Add(cacheKey, result, null, cacheTime, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
42                 }
43             }
44 
45             return (T)HttpRuntime.Cache[cacheKey];
46         }
47     }
48 }

  1、緩存組件方法接收一個獲取原始數據方法委托,一個緩存key,一個緩存過期時間,以及獲取原始數據方法參數;

  2、緩存使用HttpRuntime.Cache實現,這是.net自帶緩存組件,使用絕對緩存(當然根據需要也可以改成滑動緩存);

  3、方法先從緩存獲取數據,緩存未取到數據,執行原始數據方法委托,獲取數據,並添加入緩存。

  使用示例:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using Loncin.CodeGroup10.Utility;
 6 
 7 namespace Loncin.CodeGroup10.ConsoleTest.Test
 8 {
 9     /// <summary>
10     /// 通用緩存組件測試
11     /// </summary>
12     public class CacheHelperTest
13     {
14         /// <summary>
15         /// 測試方法
16         /// </summary>
17         public void Test()
18         {
19             // 獲取數據
20             var testData = CacheHelper.GetCacheData<List<int>>(new Func<int, List<int>>(GetTestData), "TestKey", 5, 10);
21 
22             if (testData != null && testData.Count > 0)
23             {
24                 Console.WriteLine("獲取數據成功!");
25             }
26         }
27 
28         /// <summary>
29         /// 獲取原始數據
30         /// </summary>
31         /// <param name="count"></param>
32         /// <returns></returns>
33         public List<int> GetTestData(int count)
34         {
35             var testData = new List<int>();
36             for (int i = 0; i < count; i++)
37             {
38                 testData.Add(i);
39             }
40 
41             return testData;
42         }
43     }
44 }

  總結:

  1、該緩存組件可以擴展,獲取原始數據方法可以是調用服務,可以是發送Http請求等;

  2、緩存的方式也可以擴展,將HttpRuntime.Cache替換成Redis或其他緩存,甚至可以封裝一個多級緩存方式的復雜緩存,這裡讓使用緩存的方式更方便。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved