知识大全 企业库缓存依赖的实现-基于文件依赖

Posted

篇首语:你必须非常努力,才能看起来毫不费力。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 企业库缓存依赖的实现-基于文件依赖相关的知识,希望对你有一定的参考价值。

  最近在做项目的时候 采用用Codesmith和Nettiers生成的框架来实现 生成的代码核心是基于企业库的 所以最近在恶补企业库 对于缓存的学习当然是必不可少的 尤其是经常要用到得缓存依赖 这里我用到的是文件依赖来举例子 其他的都大同小异 主要就是要实现ICacheItemExpiration中的返回值类型为bool类型的HasExpired方法 来控制到期与否 实现此方法是关键所在 下面是程序清单 欢迎大家指正

  step 实现缓存到期接口 此类就为缓存项依赖的类 为缓存依赖的核心 尤其是其中HasExpired方法的定义 此类的核心就是使用lastCount是否变化来判断缓存是否到期 如果有变化则HasExpired方法返回true 否则返回false

  Codeusing System;

  using System Web;

  using Microsoft Practices EnterpriseLibrary Caching;

  /// <summary>

  ///CacheItemDependency 的摘要说明

  /// </summary>public class CacheItemDependency : ICacheItemExpiration

  

  //依赖缓存项键 private readonly string dependencyCacheKey;

  //依赖缓存项值 private System Int lastCount; #region Constructor /// <summary>

  /// 初始化依赖缓存项 如果此缓存管理对象存在 则取出缓存的数据 若不存在 就要对此缓存管理赋值

  /// </summary>

  /// <param name= cacheKey >依赖缓存项的键</param>

  public CacheItemDependency(string cacheKey)

  

  dependencyCacheKey = cacheKey; ICacheManager cacheManager = CacheFactory GetCacheManager();

  lastCount = Int MinValue;

  if (cacheManager != null)

  

  if (cacheManager Contains(cacheKey))

  

  object o = cacheManager GetData(cacheKey);

  if (o != null)

  

  this lastCount = (int)o;

  

  lastCount = (int)cacheManager GetData(cacheKey);

  

  else

  

  cacheManager Add(cacheKey lastCount);

  

  

  

  #endregion #region Properties public string DependencyCacheKey

  

  get

  

  return dependencyCacheKey;

  

  

  public System Int LastCount

  

  get

   r

  eturn lastCount;

  

  

  #endregion #region ICacheItemExpiration Members public bool HasExpired()

  

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  if (cacheManager == null)

  

  return true;

  

  System Int currentCount = (int)cacheManager GetData(dependencyCacheKey);

  if (currentCount != lastCount)

   return true;

  else

  

  return false;

  

  

  public void Notify()

  

  public void Initialize(CacheItem owningCacheItem)

  #endregion

  using System;

  using System Web;

  using Microsoft Practices EnterpriseLibrary Caching;

  ///

  ///CacheItemDependency 的摘要说明

  ///

  public class CacheItemDependency : ICacheItemExpiration

  

  //依赖缓存项键

  private readonly string dependencyCacheKey;

  //依赖缓存项值

  private System Int lastCount;

  #region Constructor

  ///

  /// 初始化依赖缓存项 如果此缓存管理对象存在 则取出缓存的数据 若不存在 就要对此缓存管理赋值

  ///

  /// 依赖缓存项的键

  public CacheItemDependency(string cacheKey)

  

  dependencyCacheKey = cacheKey;

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  lastCount = Int MinValue;

  if (cacheManager != null)

  

  if (cacheManager Contains(cacheKey))

  

  object o = cacheManager GetData(cacheKey);

  if (o != null)

  

  this lastCount = (int)o;

  

  lastCount = (int)cacheManager GetData(cacheKey);

  

  else

  

  cacheManager Add(cacheKey lastCount);

  

  

  

  #endregion

  #region Properties

  public string DependencyCacheKey

  

  get return dependencyCacheKey;

  

  public System Int LastCount

  

  get return lastCount;

  

  #endregion

  #region ICacheItemExpiration Members

  public bool HasExpired()

  

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  if (cacheManager == null)

  

  return true;

  

  System Int currentCount = (int)cacheManager GetData(dependencyCacheKey);

  if (currentCount != lastCount)

  

  return true;

  

  else

  

  return false;

  

  

  public void Notify()

  

  

  public void Initialize(CacheItem owningCacheItem)

  

  

  #endregion

  

  step   定义修改依赖项缓存的方法

  Codeusing System;using System Web;using Microsoft Practices EnterpriseLibrary Caching;

  /// <summary>///DataAccessUtil 的摘要说明

  /// </summary>public class DataAccessUtil

  

  public DataAccessUtil()

   // //TODO: 在此处添加构造函数逻辑 //

  

  /// <summary> /// 更新所有以cacheKeys中元素为key的缓存项

  /// </summary> /// <param name= cacheKeys >缓存项的key的数组

  </param> public static void UpdateCacheDependency(string[] cacheKeys)

  

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  foreach (string cacheKey in cacheKeys)

  

  if (cacheManager != null && cacheManager Contains(cacheKey))

  

  int lastCount = (int)cacheManager GetData(cacheKey); if (lastCount < Int MaxValue) lastCount++;

  

  else

  

  lastCount = Int MinValue;

   // 这一句的作用在于更新以cacheKey为key的缓存项 从而使依赖于此缓存项的缓存项失效 cacheManager Add(cacheKey lastCount);

  

  

  

  

  using System;

  using System Web;

  using Microsoft Practices EnterpriseLibrary Caching;

  ///

  ///DataAccessUtil 的摘要说明

  ///

  public class DataAccessUtil

  

  public DataAccessUtil()

  

  //

  //TODO: 在此处添加构造函数逻辑

  //

  

  ///

  /// 更新所有以cacheKeys中元素为key的缓存项

  ///

  /// 缓存项的key的数组

  public static void UpdateCacheDependency(string[] cacheKeys)

  

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  foreach (string cacheKey in cacheKeys)

  

  if (cacheManager != null && cacheManager Contains(cacheKey))

  

  int lastCount = (int)cacheManager GetData(cacheKey);

  if (lastCount < Int MaxValue)

  

  lastCount++;

  

  else

  

  lastCount = Int MinValue;

  

  // 这一句的作用在于更新以cacheKey为key的缓存项 从而使依赖于此缓存项的缓存项失效

  cacheManager Add(cacheKey lastCount);

  

  

  

  

  step   测试实体 下面只是个简单的测试 大家可以发散一下 写出更加有复用性的方法

  Codeusing System;

  using System Collections Generic;

  using System Linq;

  using System Web;

  using System Web UI;

  using System Web UI WebControls;

  using Microsoft Practices EnterpriseLibrary Caching;

  public partial class Test : System Web UI Page

  

  protected void Page_Load(object sender EventArgs e)

  

  if (!IsPostBack)

  

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  cacheManager Add( s TextBox Text CacheItemPriority Normal null new CacheItemDependency( s ));

  this Label Text = cacheManager GetData( s ) as string;

  

   protected void Button _Click(object sender EventArgs e)

  

  ICacheManager cacheManager = CacheFactory GetCacheManager();

  DataAccessUtil UpdateCacheDependency(new string[] s );

  if (cacheManager GetData( s ) == null)

  

  cacheManager Add( s TextBox Text CacheItemPriority Normal null new CacheItemDependency( s ));

   this Label Text = cacheManager GetData( s ) as string;

  

cha138/Article/program/net/201311/13594

相关参考

知识大全 .net数据依赖缓存

   环境      SQL版本MSSQL     &nbs

近年来,我国光伏产业快速发展,已形成较为完整的光伏制造产业体系,但也面临产能严重过剩、市场过度依赖外需、企业普遍经营困难

近年来,我国光伏产业快速发展,已形成较为完整的光伏制造产业体系,但也面临产能严重过剩、市场过度依赖外需、企业普遍经营困难等问题。解决这些问题,要做到统筹兼顾、综合施策,着力提升产业竞争力。为此,我国光

知识大全 基于hibernate的开源通用查询框架-bba96

  bba框架当前版本包含  bbacore核心框架封装HibernateCriteria提供方便的查询以及分页支持查询参数  bbastruts基于Struts的开发框架依赖core提供便捷的CRU

知识大全 情侣网名 请帮我想个和依赖有关的网名 最好是网名里面有依赖字的 越多越好 谢谢

情侣网名请帮我想个和依赖有关的网名最好是网名里面有依赖字的越多越好谢谢贪恋你的温柔|依赖你的所有丶依赖迩给的温暖|丶依赖迩给的拥抱放肆的依赖ゝ...対伱的执着ゝ|対伱的铱籁ゝ贪恋伱的全部|依赖伱的所有

药物依赖有哪些共同特征

药物依赖一般具有以下特征:  (1)对药物产生心理依赖:即依赖者具有持续地或周期地渴望体验该药物的心理效应,这种愿望可以压倒一切。为了得到药物,会不择手段行事。所有能产生依赖的药物均有心理依赖性。  

药物依赖有哪些共同特征

药物依赖一般具有以下特征:  (1)对药物产生心理依赖:即依赖者具有持续地或周期地渴望体验该药物的心理效应,这种愿望可以压倒一切。为了得到药物,会不择手段行事。所有能产生依赖的药物均有心理依赖性。  

激素依赖导致皮炎?

激素依赖导致皮炎?长期使用激素类的化妆品,导致了面部对于激素产生依赖发生激素依赖性皮炎。这是一种极为多见的情况。而且发生在各种上班族以及年轻女孩的身上较多。那么,对于这个激素依赖性的皮炎我们需要了解哪

激素依赖导致皮炎?

激素依赖导致皮炎?长期使用激素类的化妆品,导致了面部对于激素产生依赖发生激素依赖性皮炎。这是一种极为多见的情况。而且发生在各种上班族以及年轻女孩的身上较多。那么,对于这个激素依赖性的皮炎我们需要了解哪

激素依赖性皮炎治疗有哪些

激素依赖性皮炎怎么治,激素依赖性皮炎是因由于,长期反复不当的,外用激素引起的皮炎,长期性的激素依赖性皮炎,要求保持患部的清洁,油性者可以适当,用硫磺皂清洗患部。激素依赖性皮炎治疗方法有哪些?素依赖性皮

激素依赖性皮炎治疗有哪些

激素依赖性皮炎怎么治,激素依赖性皮炎是因由于,长期反复不当的,外用激素引起的皮炎,长期性的激素依赖性皮炎,要求保持患部的清洁,油性者可以适当,用硫磺皂清洗患部。激素依赖性皮炎治疗方法有哪些?素依赖性皮