[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);
        }
    }
}

希望有所帮助!

[Enterprise Library for .NET Framework 2.0]缓存使用小计

时间: 2024-08-24 10:44:30

[Enterprise Library for .NET Framework 2.0]缓存使用小计的相关文章

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.Enterp

[Enterprise Library for .NET Framework 2.0]自定义日志路径或日志文件名称

有时候,日志输出的时候会根据时间来分类,譬如"20140821\trace.log",在Enterprise Library中通过工具配置,只能定义日志文件名称,可以通过代码修改FlatFileTraceListenerData实现或Custom Trace Listener方式, 通过代码修改FlatFileTraceListenerData实现代码如下: public static string GetTraceLogPath(string listenersName) { str

[Enterprise Library for .NET Framework 2.0]Custom Trace Listener例子演示

1.打开配置文件 2.移除不需要的Block,并添加Log Block 3.添加"Custom Trace Listener" 4.定义Attributes 5.添加定义类库"CustomTraceListenerExtensions" 6.编写代码,如下: using System; using System.Collections.Specialized; using System.Diagnostics; using System.IO; using Micr

转:Enterprise Library 4.0缓存应用程序块

英文原文:http://msdn.microsoft.com/zh-cn/library/cc511588(en-us).aspx Enterprise Library 缓存应用程序块允许开发人员在应用程序中合并一个局部缓存,它支持内存内的缓存,和可选的可以是数据库存储或独立存储的后端存储.应用程序块可以不做修改 的使用,它提供所有必须的获取.添加和移除缓存数据的功能.可配置的到期和清除策略也是应用程序块的一部分. 在构建企业范围发布的应用程序时,架构和开发人员都要面对许多挑战,缓存可以帮助他们

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

Enterprise Library 5.0 学习笔记

最近了解了微软提供的企业开发框架Enterprise Library,目前最新版本是6.0,但是不支持FW3.5,所以就学习了5.0的版本,EL5.0支持FW3.5和4.0,官网下载地址是:https://www.microsoft.com/en-us/download/details.aspx?id=15104,将msi文件解压到特定的文件夹就可以有EL5.0的全部dll类库了,EL5.0的文档下载地址是:http://entlib.codeplex.com/releases/view/431

Microsoft Enterprise Library 6.0 之 Exception 企业库异常处理

对于企业库异常处理,这里做个简单的介绍和笔记. 环境 VS2012, .NET Framework 4.0, Microsoft Enterprise Library 6.0 准备工作 1. 下载Enterprise Library配置编辑工具:Microsoft.Practices.EnterpriseLibrary.ConfigConsoleV6.vsix. 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=38789

Enterprise Library 5.0 系列教程

1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级) 3. Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 4. Microsoft Enterpr

Enterprise Library 6.0 Semantic Logging Application Block Configuration

使用Enterprise Library 6.0的Logging application 模块,配置步骤如下: 1.Nuget 安装 Enterprise Library Logging模块 命令行:Install-package EnterpriseLibrary.Logging. 2.配置文件: 当前基本都是通过Enterprise Library 配置的,但是很不幸,我的总是安装失败,于是自己baidu了一把,然后进行配置,配置如下: <configSections> <secti