如何不使用数据库缓存,还达到实时更新

发表于:2012-2-17 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wlf    来源:51Testing软件测试网采编

  先说下当前项目的场景:

  后台人员1天不定时的,添加新闻和视频图片10条左右,数量不多

  不使用缓存,回和数据库打交道,非常耗时,造成效率低,尤其是在数据量非常庞大的情况下

  可是加了缓存,加多少时间的缓存?新闻要保证实时更新,一发布立刻显示出来

  微软给出了解决方法,数据库缓存依赖项,但是貌似只能用在SQL上,而且要配置些东西;还有,并不透明~ 一些东西看不到。这里提供另一种方法:

  先说下大概思路,在所有查找操作时,都把结果插入 cache 在对数据库有操作时(增删改) 删除cache

  有了思路,开始解决问题,这里会遇到两个问题

  第一 : 所有查找时,cache建怎么定义,保证不重复呢

  第二:微软没有提供删除所有cache的方法,只有cache["键值名"].Remove(); 而没有removeall();

  下面上代码和解决办法 以及思路

  1. #region##根据条件得到新闻 
  2.      /// <summary> 
  3.      /// 根据条件得到新闻 
  4.      /// </summary> 
  5.      /// <param name="tableName"></param> 
  6.      /// <param name="whereStr"></param> 
  7.      /// <param name="topCount"></param> 
  8.      /// <returns></returns> 
  9.      public List<CmsDemoModels.NewsInfo> GetByCondition(string whereStr, string topCount)  
  10.      {  
  11.          string cacheKey = string.Format("{0}.{1}.{2}", GetType(), "GetByCondition",whereStr+topCount);  
  12.          if (HttpRuntime.Cache[cacheKey] != null)  
  13.          {  
  14.              return HttpRuntime.Cache[cacheKey] as List<CmsDemoModels.NewsInfo>;  
  15.          }  
  16.          else 
  17.          {  
  18.              //从数据库里查找并插入缓存 
  19.              using (CmsDemoDAL.NewsInfoServcie ns = new NewsInfoServcie())  
  20.              {  
  21.                  List<NewsInfo> newsList=ns.GetByCondition(whereStr, topCount);  
  22.                  HttpRuntime.Cache.Insert(cacheKey,newsList, null, DateTime.Now.AddDays(1), TimeSpan.Zero);  
  23.                  return newsList;  
  24.              }  
  25.          }  
  26.      }

  看上面的代码

string cacheKey = string.Format("{0}.{1}.{2}", GetType(), "GetByCondition",whereStr+topCount);

  我定义这缓存键值不重复的方法是,用当前类+方法名+所有参数名的组合,来保证唯一性这样把所有查询的方法,以及查询结果都缓存起来了~

  1. public static void ClearOutputCache()  
  2.     {  
  3.         //移除自定义缓存 
  4.         foreach (var item in HttpRuntime.Cache.Cast<DictionaryEntry>().ToArray())  
  5.         {  
  6.             HttpRuntime.Cache.Remove((string)item.Key);  
  7.         }  
  8.    }

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号