您现在的位置是:首页 >

浏览器视频缓存文件在哪 企业库缓存依赖的实现-基于文件依赖

火烧 2022-10-10 20:20:58 1042
企业库缓存依赖的实现-基于文件依赖   最近在做项目的时候 采用用Code mith和Nettier 生成的框架来实现 生成的代码核心是基于企业库的 所以最近在恶补企业库 对于缓存的学习当然是必不可少

企业库缓存依赖的实现-基于文件依赖  

  最近在做项目的时候 采用用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;

  }

lishixinzhi/Article/program/net/201311/13594  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码