【问题标题】:Entlib Cache.Contains NULL problemEntlib Cache.Contains NULL 问题
【发布时间】:2009-03-23 13:56:49
【问题描述】:

我在我们的后端有一个组合的授权和菜单结构系统。 出于性能原因,EntLib 缓存用于前端客户端(MVC rel 1.0 网站,IIS 5.1 本地,IIS 6.0 服务器,无集群)。

有时 'Cache.Contains' 会返回 true,但缓存的内容为 NULL。我确定我填写正确,所以这里有什么问题?

编辑:当我将缓存设置为 1 分钟并添加缓存键“A_Key”时,我会在检查 CurrentCacheState 时看到键返回。当我在 2 分钟后查看 CurrentCacheState 时,密钥仍然存在。当我执行“包含”时,返回 true。当我再次执行“包含”时,cacheKey 不见了! 同步问题??

问候, 米歇尔

摘录:

if (IntranetCaching.Cache.Contains(cacheKey))
{
    menuItems = (List<BoMenuItem>)IntranetCaching.Cache[cacheKey];
}
else
{
    using (AuthorizationServiceProxyHelper authorizationServiceProxyHelper = new AuthorizationServiceProxyHelper())
    {
        menuItems = authorizationServiceProxyHelper.Proxy.SelectMenuByUserAndApplication(APPNAME, userName, AuthorizationType.ENUM_LOGIN);
        IntranetCaching.Add(cacheKey, menuItems);
    }
}

还有缓存助手:

public static class IntranetCaching
{
    public static ICacheManager Cache { get; private set; }

    static IntranetCaching()
    {
        Cache = CacheFactory.GetCacheManager();
    }

    public static void Add(string key, object value)
    {
        Cache.Add(
            key
            , value
            , CacheItemPriority.Normal
            , null
            , new Microsoft.Practices.EnterpriseLibrary.Caching.Expirations.AbsoluteTime(TimeSpan.FromMinutes(10)));
    }
}

【问题讨论】:

    标签: caching null enterprise contains


    【解决方案1】:

    感谢 Michael 跟进您自己的问题,我整天都被这个问题困扰着,我发现如果我尝试从缓存中检索一个项目,这将到期(+ 0 到 25 秒)我将得到一个 NULL 值. Codeplex 在其常见问题解答中发布了一种解决方法(各种):

    一个。刷新项目时如何避免从 CacheManager 获取空值? - 间歇性地,您可能会遇到这种情况。要解决此问题,请创建您自己的 ICacheItemExpiration 实现。在 HasExpired() 方法中,实现一个逻辑,该逻辑将检查项目是否已过期,如果已过期,将更新项目的值。此方法应始终返回 false 以使项目不被标记为过期。作为在 HasExpired() 方法中返回 false 的结果,该项目将不会被刷新,并且将包含在该方法中实现的更新值。 参考:link

    【讨论】:

      【解决方案2】:

      我从埃维诺(Entlib 的创建者)得到以下回复:

      很可能是 BackgroundScheduler 还没有进行清扫。如果 你要检查源 代码,包含方法只检查 如果特定键存在于 内存缓存哈希表,而在 GetData 方法,代码先检查 如果该项目已过期,如果已过期, 该项目已从缓存中删除。

      Sarah Urmeneta 全球技术 & 解决方案 埃维诺公司 entlib.support@avanade.com

      该解决方案对我有用。 问题仍然存在,当它的结果不能以合理的方式使用时,为什么你可以使用“包含”。

      问候, M.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-19
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 2012-03-11
        • 1970-01-01
        • 2017-01-13
        相关资源
        最近更新 更多