企业库5.0——缓存应用

using System;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

namespace SpecialSale.Sys.SysCache
{
  /// <summary>
  /// 缓存过期类型枚举
  /// </summary>
  public enum EnumCacheExpirationType
  {
    /// <summary>
    /// 绝对过期
    /// </summary>
    AbsoluteTime = 1,
    /// <summary>
    /// 固定过期
    /// </summary>
    SlidingTime = 2,
    /// <summary>
    /// 指定过期格式,以特定的格式来过期
    /// </summary>
    ExtendedFormatTime=3,
    /// <summary>
    /// 文件依赖
    /// </summary>
    FileDependency=4,
  }

  public static class CacheHelper
  {
    //2种建立CacheManager的方式
    //ICacheManager cache = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>();
    private static ICacheManager cache = CacheFactory.GetCacheManager();

    /// <summary>
    /// 添加缓存
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="type">缓存过期类型</param>
    public static void Add(string key, object value, EnumCacheExpirationType type)
    {
      switch (type)
      {
        case EnumCacheExpirationType.AbsoluteTime:
          cache.Add(key, value, CacheItemPriority.Normal, new SysCacheItemRefreshAction(), new AbsoluteTime(TimeSpan.FromMinutes(15)));
          break;
        case EnumCacheExpirationType.SlidingTime:
          cache.Add(key, value, CacheItemPriority.Normal, new SysCacheItemRefreshAction(), new SlidingTime(TimeSpan.FromMinutes(15)));
          break;
        case EnumCacheExpirationType.ExtendedFormatTime:
          throw new Exception("暂时不支持 ExtendedFormatTime 过期");
          break;
        case EnumCacheExpirationType.FileDependency:
          throw new Exception("暂时不支持 FileDependency 过期");
          break;
      }
    }

    /// <summary>
    /// 获取缓存对象
    /// </summary>
    /// <param name="key">键</param>
    /// <returns></returns>
    public static T GetCache<T>(string key) where T:class
    {
      return cache.GetData(key) as T;
    }

    /// <summary>
    /// 移除缓存对象
    /// </summary>
    /// <param name="key">键</param>
    public static void RemoveCache(string key)
    {
      cache.Remove(key);
    }
  }

  /// <summary>
  /// 自定义缓存刷新操作
  /// </summary>
  [Serializable]
  public class SysCacheItemRefreshAction : ICacheItemRefreshAction
  {
    #region ICacheItemRefreshAction 成员

    /// <summary>
    /// 自定义刷新操作
    /// </summary>
    /// <param name="removedKey">移除的键</param>
    /// <param name="expiredValue">过期的值</param>
    /// <param name="removalReason">移除理由</param>
    void ICacheItemRefreshAction.Refresh(string removedKey, object expiredValue, CacheItemRemovedReason removalReason)
    {
      if (removalReason == CacheItemRemovedReason.Expired)
      {
        ICacheManager cache = CacheFactory.GetCacheManager();
        cache.Add(removedKey, expiredValue);
      }
    }
    #endregion
  }
}

 

转载保留:http://blog.csdn.net/xxj_jing/article/details/7905285

 

posted @ 2012-08-24 19:34  草青工作室  阅读(202)  评论(0编辑  收藏  举报