首页 > 代码库 > 通用缓存组件
通用缓存组件
缓存有很多种,用的最普遍的可能就是内存缓存了。内存缓存的实现方式也有很多种,比如用静态变量,比如用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.Utility10 {11 /// <summary>12 /// 通用缓存组件13 /// </summary>14 public class CacheHelper15 {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 CacheHelperTest13 {14 /// <summary>15 /// 测试方法16 /// </summary>17 public void Test()18 {19 // 获取数据20 var testData = http://www.mamicode.com/CacheHelper.GetCacheDataint>>(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 = http://www.mamicode.com/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或其他缓存,甚至可以封装一个多级缓存方式的复杂缓存,这里让使用缓存的方式更方便。
通用缓存组件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。