65.9K
CodeProject 正在变化。 阅读更多。
Home

通用缓存管理器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.25/5 (5投票s)

2007年2月3日

CPOL

2分钟阅读

viewsIcon

39138

downloadIcon

222

一个使用泛型和 Microsoft Enterprise Library Cache Application Block 构建的缓存管理器。

引言

首先,我想指出这是我的第一篇文章,所以非常欢迎任何反馈,因为我是一名长期读者,现在计划与社区分享我的一些成就,并成为 CodeProject 的长期发帖人 :)

通用缓存管理器构建在 Microsoft Enterprise Library Caching Application Block 之上,并提供了一种使用 .NET 2.0 泛型来拥有强类型缓存管理器的方法。 我决定从我正在开发的一个更大的应用程序中开发通用缓存管理器。 我需要一种快速缓存对象的方法,但也想要泛型带来的灵活性。 由于我已经在使用 Microsoft Enterprise Library,所以我决定以此为基础,并因此可以发挥 Microsoft Enterprise Library 的强大功能和灵活性。

使用代码

为了使用该代码,您必须首先使用 Microsoft Enterprise Library Caching Application Block 部分更新您的*web/app.config*文件。

下面是一个*app/web.config*设置的快速示例

</configuration />
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="cachingConfiguration" 
           type="Microsoft.Practices.EnterpriseLibrary.Caching.
                 Configuration.CacheManagerSettings,
                 Microsoft.Practices.EnterpriseLibrary.Caching" />
    </configSections>
    <cachingConfiguration defaultCacheManager="Default Cache Manager">
    <backingStores>
        <add name="inMemory" 
          type="Microsoft.Practices.EnterpriseLibrary.Caching.
                BackingStoreImplementations.NullBackingStore, 
                Microsoft.Practices.EnterpriseLibrary.Caching" />
    </backingStores>
    <cacheManagers>
        <add name="Default Cache Manager" expirationPollFrequencyInSeconds="60" 
           maximumElementsInCacheBeforeScavenging="1000" 
           numberToRemoveWhenScavenging="10" backingStoreName="inMemory" />
    </cacheManagers>
    </cachingConfiguration>
</configuration>

利用通用缓存管理器的类在命名空间DandTSoftware.GenericCacheManager中命名为GenericCacheManager(使其成为DandTSoftware.GenericCacheManager.GenericCacheManager)。

首先,您必须使用您希望使用的对象的类型创建通用缓存管理器的实例。

下面的代码向您展示了如何创建一个仅处理字符串的通用缓存管理器实例。但是,多个不同类型的通用缓存管理器指向同一个中央缓存存储。

GenericCacheManager<string> StringCacheManager = 
                            new GenericCacheManager<string>();

将对象添加到缓存中。

要将对象添加到缓存存储中,只需调用AddToCache方法。此方法以及所有其他访问缓存存储的方法都有一个字符串和整数重载。两者都服务于相同的目的;但是,经常处理带有整数 ID 的对象,我决定创建一个方法来支持整数作为键。

GenericCacheManager还支持在缓存存储中创建唯一键。这是通过私有方法MakeKey完成的,该方法只是执行以下操作

private string MakeKey(string ID)
{
    return string.Format("CACHEKEY_{0}_{1}", typeof(T).ToString(), ID);
}
private string MakeKey(int ID)
{
    // Abstracted to MakeKey(string)
    return this.MakeKey(ID.ToString());
}

将对象检索到缓存中

要从缓存管理器中检索项目,应使用方法GetData()

将对象删除到缓存中

要从缓存中删除项目,请使用方法RemoveFromCache()

现在您有了一个通用缓存管理器的实例,它使用泛型,期望并且只处理字符串。当然,任何类型都是可能的。

关注点

当您希望构造通用缓存管理器时,构造函数有一个接受布尔值的重载。我实现此功能是因为 Microsoft Enterprise Library 试图使用 ASP.NET 用户帐户无法访问的资源。此构造函数指示通用缓存管理器,并模拟应用程序池正在运行的用户的身份。

历史

  • 1.0.0 - 初始版本。
© . All rights reserved.