gpt4 book ai didi

c# - Microsoft Enterprise Library - 缓存机制到期

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:56 24 4
gpt4 key购买 nike

早上好

我正在尝试将缓存机制集成到我当前的项目中,并想询问我的最佳实践和问题。

我的 web.config 定义如下:

<configSections>
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>


<cachingConfiguration defaultCacheManager="SomeName">
<cacheManagers>
<add expirationPollFrequencyInSeconds="600" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="Null Storage" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="SomeName" />
</cacheManagers>
<backingStores>
<add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="Null Storage" />
</backingStores>
</cachingConfiguration>

当我向缓存添加内容时,我使用以下代码:

ICacheManager manager = CacheFactory.GetCacheManager("SomeName");
if (manager.GetData(key) != null && IsCacheEnable)
{
specialChars = (Hashtable)manager.GetData(key);
}

else
{
manager.Add(key, specialChars, CacheItemPriority.Normal, null, new SlidingTime(new TimeSpan(0, 0, CacheExpirySecond)));
}

从文档中,我可以看到通过 Add(string key, object value) 方法放入缓存的项目不会过期。但是,我可以看到方法 Add(string key, object value, CacheItemPriority scavengingPriority, ICacheItemRefreshAction refreshAction, params ICacheItemExpiration[] expirations) 定义了一个指定缓存何时过期的时间跨度

我的问题是,为什么我们要在 web.config 中定义 expirationPollFrequencyInSeconds 属性,而当我们使用第二个 Add 方法在缓存中添加项目时需要再次定义时间跨度?我错过了什么吗?谢谢

最佳答案

如果我错了,请纠正我。

我们在 Add() 方法中指定的 ICacheItemExpiration(在我们的例子中)实际上定义了将应用于要添加到缓存的项目的过期策略.在我们的例子中,我们使用了 SlidingTime 过期策略。假设我们将 SlidingTime 设置为 10 秒。这意味着如果 10 秒内未连续访问该项目,该项目将被标记为过期。当有多个请求进入该项目时,当我们需要使该项目保持事件状态时,这很有用。作为旁注,我们还有其他过期策略,例如 AbsoluteTimeFileDependencyNeverExpire...

我们需要了解,当一个项目已经过期时,它仍然存在于哈希中,直到后台调度程序删除该项目(取决于后台调度程序将检查其过期的过期策略)。当为 expirationPollFrequencyInSeconds 设置一个值时,我们正在定义后台调度程序执行的时间间隔,并分析哈希以删除已过期的项目(根据在该项目上定义的过期策略)。

关于c# - Microsoft Enterprise Library - 缓存机制到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16828881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com