通用缓存组件_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 通用缓存组件

通用缓存组件

 2015/1/15 9:58:44  loncin  程序员俱乐部  我要评论(0)
  • 摘要:缓存有很多种,用的最普遍的可能就是内存缓存了。内存缓存的实现方式也有很多种,比如用静态变量,比如用Cache,但这些方式只针对单一缓存变量,每个缓存变量都要重新写一套方法,无法实现通用。这里提供一种通用的内存缓存组件,不用再为每个缓存做实现了。话不多说,先上代码:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Reflection;5usingSystem.Text
  • 标签:缓存

  缓存有很多种,用的最普遍的可能就是内存缓存了。内存缓存的实现方式也有很多种,比如用静态变量,比如用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或其他缓存,甚至可以封装一个多级缓存方式的复杂缓存,这里让使用缓存的方式更方便。

发表评论
用户名: 匿名