Enterprise Library for .NET Framework 2.0缓存使用实例

Enterprise Library for .NET Framework 2.0 是微软发布的企业库,它支持.NET Framework 2.0。并且由一系列的企业应用程序块来构成。本文即以实例展示了Enterprise Library for .NET Framework 2.0缓存的使用方法,供大家参考。

关键代码如下:

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

namespace ETLUtilHelpV2
{
  /// <summary>
  /// Enterprise Library for .NET Framework 2.0 缓存工具类
  /// </summary>
  public class ETLCacheToolV2
  {
    /*
     *在Caching Application Block中,主要提供以下四种保存缓存数据的途径,
     *分别是:内存存储(默认)、独立存储(Isolated Storage)、
     *数据库存储(DataBase Cache Storage)和自定义存储(Custom Cache Storage)。
     *In-Memory:保存在内存中。
     *Isolated Storage Cache Store:系统将缓存的信息保存在独立文件中(C:\Users\<<user name>>\AppData\Local\IsolatedStorage)。
     *Data Cache Storage:将缓存数据保存在数据库中。(需要运行CreateCachingDatabase.sql脚本)
     *Custom Cache Storage:自己扩展的处理器。我们可以将数据保存在注册表中或文本文件中。
     *
     * 缓存等级,在企业库的缓存模块中已经提供了4个缓存等级:Low,Normal,High和NotRemovable,在超出最大缓存数量后会自动根据缓存等级来移除对象。
     * 过期方式,企业库默认提供4种过期方式
     * AbsoluteTime:绝对是时间过期,传递一个时间对象指定到时过期
     * SlidingTime:缓存在最后一次访问之后多少时间后过期,默认为2分钟,有2个构造函数可以指定一个过期时间或指定一个过期时间和一个最后使用时
     * ExtendedFormatTime :指定过期格式,以特定的格式来过期,通过ExtendedFormat.cs类来包装过期方式,具体可参照ExtendedFormat.cs,源代码中已经给出了很多方式
     * FileDependency:依赖于文件过期,当所依赖的文件被修改则过期,这个我觉得很有用,因为在许多网站,如论坛、新闻系统等都需要大量的配置,可以将配置文件信息进行缓存,将依赖项设为配置文件,这样当用户更改了配置文件后通过ICacheItemRefreshAction.Refresh可以自动重新缓存。
     */

    ///// <summary>
    ///// 自定义缓存刷新操作
    ///// </summary>
    //[Serializable]
    //public class CacheItemRefreshAction : 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)
    //    {
    //      CacheManager cache = CacheFactory.GetCacheManager();
    //      cache.Add(removedKey, expiredValue);
    //    }
    //  }
    //  #endregion
    //}

    static CacheManager CacheMgr = null;
    static ETLCacheToolV2()
    {
      CacheMgr = CacheFactory.GetCacheManager();
    }
    /// <summary>
    /// 获取CacheManager实例
    /// </summary>
    /// <returns>CacheManager</returns>
    public static CacheManager Instance()
    {
      return CacheMgr;
    }
    /// <summary>
    /// 添加缓存
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    public static void Add(string key, object value)
    {
      CacheMgr.Add(key, value);
    }
    /// <summary>
    /// 添加缓存_滑动过期_小时
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="hour">小时</param>
    public static void AddWithHour(string key, object value, int hour)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromHours(hour)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_天
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="days">天</param>
    public static void AddWithDay(string key, object value, int days)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromDays(days)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_毫秒
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="millisecond">毫秒</param>
    public static void AddWithMillisecond(string key, object value, int millisecond)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromMilliseconds(millisecond)));
    }
    /// <summary>
    ///添加缓存_滑动过期_分钟
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="minutes">分钟</param>
    public static void AddWithMinutes(string key, object value, int minutes)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromMinutes(minutes)));
    }
    /// <summary>
    ///添加缓存_滑动过期_秒
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="seconds">秒</param>
    public static void AddWithSeconds(string key, object value, int seconds)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromSeconds(seconds)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_文件依赖
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="filePath">文件路径</param>
    public static void AddFileDependency(string key, object value, string filePath)
    {
      FileDependency _fileDependency = new FileDependency(filePath);
      CacheMgr.Add(key, value, CacheItemPriority.Normal, null, _fileDependency);
    }
    /// <summary>
    /// 添加缓存_滑动过期_小时
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="hour">小时</param>
    /// <param name="refreshAction">ICacheItemRefreshAction</param>
    public static void AddWithHour(string key, object value, int hour, ICacheItemRefreshAction refreshAction)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromHours(hour)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_天
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="days">天</param>
    /// <param name="refreshAction">ICacheItemRefreshAction</param>
    public static void AddWithDay(string key, object value, int days, ICacheItemRefreshAction refreshAction)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromDays(days)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_毫秒
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="millisecond">毫秒</param>
    /// <param name="refreshAction">ICacheItemRefreshAction</param>
    public static void AddWithMillisecond(string key, object value, int millisecond, ICacheItemRefreshAction refreshAction)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromMilliseconds(millisecond)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_分钟
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="minutes">分钟</param>
    /// <param name="refreshAction">ICacheItemRefreshAction</param>
    public static void AddWithMinutes(string key, object value, int minutes, ICacheItemRefreshAction refreshAction)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromMinutes(minutes)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_秒
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="seconds">秒</param>
    /// <param name="refreshAction">ICacheItemRefreshAction</param>
    public static void AddWithSeconds(string key, object value, int seconds, ICacheItemRefreshAction refreshAction)
    {
      CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromSeconds(seconds)));
    }
    /// <summary>
    /// 添加缓存_滑动过期_文件依赖
    /// </summary>
    /// <param name="key">键</param>
    /// <param name="value">值</param>
    /// <param name="filePath">文件路径</param>
    /// <param name="refreshAction">ICacheItemRefreshAction</param>
    public static void AddFileDependency(string key, object value, string filePath, ICacheItemRefreshAction refreshAction)
    {
      FileDependency _fileDependency = new FileDependency(filePath);
      CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, _fileDependency);
    }
    /// <summary>
    /// 清空缓存
    /// </summary>
    public static void Flush()
    {
      CacheMgr.Flush();
    }
    /// <summary>
    /// 移出缓存
    /// </summary>
    /// <param name="key"></param>
    public static void Remove(string key)
    {
      if (CacheMgr.Contains(key))
        CacheMgr.Remove(key);
    }
    /// <summary>
    /// 获取缓存
    /// </summary>
    /// <param name="key">键</param>
    /// <returns>值</returns>
    public static object GetData(string key)
    {
      if (CacheMgr.Contains(key))
        return CacheMgr.GetData(key);
      return null;
    }
    /// <summary>
    /// 获取缓存
    /// </summary>
    /// <typeparam name="T">泛型</typeparam>
    /// <param name="key">键</param>
    /// <returns>值</returns>
    public static T GetData<T>(string key)
    {
      if (CacheMgr.Contains(key))
        return (T)CacheMgr.GetData(key);
      return default(T);
    }
  }
}

读者可在自身项目中对上述代码加以测试,相信会对大家的C#程序设计起到一定的帮助作用。

(0)

相关推荐

  • .net/c# memcached缓存获取所有缓存键的方法步骤

    使用组件 memcached 1.2.6 .net 类库 memcacheddotnet_clientlib-1.1.5 1.增加memcacheddotnet_clientlib-1.1.5代码 下载好组件后,用vs打开.net类库memcacheddotnet_clientlib-1.1.5,打开MemCachedClient.cs,增加如下方法: 复制代码 代码如下: public Hashtable Stats(ArrayList servers, string command)    

  • C#中缓存的基本用法总结

    本文初步探讨了C#缓存的原理及应用,并以实例加以分析总结,这些对C#初学者来说是很有必要熟练掌握的内容.具体如下: 一.概述: 缓存应用目的:缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 1.缓存的引用空间:System.Web.Caching; 缓存命名空间主要提供三种操作:缓存数据对象.对象的缓存依赖和数据库的缓存依赖.其中缓存任何对象都使用一个类C

  • C#控制IE进程关闭和缓存清理的实现代码

    复制代码 代码如下: class IEUtil {    public static void openIE(string url) {        try {            //System.Diagnostics.Process.Start(url);            System.Diagnostics.Process p = new System.Diagnostics.Process();            p.StartInfo.FileName = "iexpl

  • asp.net(C#)遍历memcached缓存对象

    STATS命令 遍历memcached缓存对象(C#)转载之青草堂 出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象. 1.stats items 显示各个slab中item的数目. 2.stats cachedump slab_id limit_num 显示某个slab中的前limit_num个key列表,显示格式:ITEM key_name [ value_length b; expire_time|access_time s] 除了

  • C#缓存之SqlCacheDependency用法实例总结

    本文整理汇总了C#缓存的数据库依赖类SqlCacheDependency的使用方法,具体内容如下: 1.数据库依赖类SqlCacheDependency 数据库缓存依赖主要解决的是当数据库的内容发生改变时,如何及时通知缓存,并更新缓存中的数据的问题. 语法定义: SqlCacheDependency类主要的构造函数如下: public SqlCacheDependency(string database,string table) 其中参数一代表要启用缓存的数据库,参数二表示缓存的表.在实际使用

  • C# memcached缓存使用实例代码

    复制代码 代码如下: public interface ICacheStrategy    {        /// <summary>        /// 添加数据到缓存        /// </summary>        /// <param name="objId">缓存名称</param>        /// <param name="o">缓存内容</param>      

  • .NET Framework 4.5新特性介绍

    开发者预览版.net 4.5 .NET for Metro style appsMetro风格的应用程序是利用Windows操作系统的强大功能设计的特殊表单元素.一个称之为.NET APIs for Metro style apps的.Net的一个子集用来支持Metro风格的应用程序,可以使用C#或Visual Basic来编写Metro风格的应用程序.详见:http://go.microsoft.com/fwlink/?LinkId=228491 核心新功能和改进以下这些功能和改进被添加到公共

  • .net框架(framework)版本不匹配的解决方法

    在已安装了.net framework的计算机上部署用.net开发的程序时,若.net framework的版本不匹配,则提示:" .Net Framework Initialization Error – Unable to find a version of the runtime to run this application". 这时候有个简单的办法是,修改(如果没有则创建)程序xxx.exe所在目录的和xxx.exe同名的config文件--xxx.exe.config,使其

  • C#难点逐个击破(6):C#数据类型与.net framework数据类型

    其中有<Java程序设计教程>是一个美籍华人的作品,还有Nicholas C.Zakes的<Javascript高级程序设计>,还有就是这本Illustrator C# 2008,中文译为"插图详解C#2008",实际上插图不是很多.这是我第一次完整的读原版书,感慨良深.一是我的英文居然还可以,想当初考六级还差了20多分,–!!二是老外写书真的是用心在写,对待自己的书就像对待自己的孩子一样. 以上是闲话,之前一直很想知道.net framework数据存储类型在

  • c#自带缓存使用方法 c#移除清理缓存

    复制代码 代码如下: /// <summary>/// 获取数据缓存/// </summary>/// <param name="CacheKey">键</param>public static object GetCache(string CacheKey){    System.Web.Caching.Cache objCache = HttpRuntime.Cache;    return objCache[CacheKey];}/

  • C#打包应用程序,与.NETFramework介绍

    1, 新建一个项目, 类型为 安装和部署 中的安装项目或安装向导 2,双击应用程序文件夹,添加所有需要的文件(包括图标,Access,图片和dll等),特别是要打包的编写的应用程序生成文件,在bin/debug 文件夹中的exe文件.其图标在此编程项目中的 项目属性 生成中设置,同时最好重命名,因为在包含进去之后无法重命名,这样在 目标pc 上安装时就为包含进去时的名字和图标. 3,为 应用程序exe 在 桌面菜单 和 用户管理菜单(即"开始",最好为文件夹,还要添加 卸载exe快捷方

随机推荐