.NET缓存中的项目未按预期到期

时间:2015-04-07 19:31:36

标签: c# .net caching ektron

我不太熟悉缓存的工作原理,所以我希望我能够提供足够的信息。

基本上,我的问题是我们正在缓存项目,它们似乎可以直接添加到缓存中,但它们似乎没有过期,或者只要它们感觉到它们就会过期。我没有使用滑动过期。

我正在测试的项目目前有300(5分钟)到期但30分钟后测试,该项目仍然从缓存中返回。我有一些物品应该在7天后仍然出现一天后过期。因此,我们的更改/修改不会在网站上显示。

以下是我们尝试过的代码。

    public static void AddtoCache(object objToCache, CacheLevel cacheLevel, string cacheKey)
    {
        if (objToCache == null)
        {
            return;
        }

        if (HttpContext.Current.Cache != null)
        {
            HttpContext.Current.Cache.Insert(cacheKey, objToCache, null, DateTime.Now.AddSeconds((double)cacheLevel), System.Web.Caching.Cache.NoSlidingExpiration);
        }
    }

还有:

    public static void AddtoCache(object objToCache, CacheLevel cacheLevel, string cacheKey)
    {
        if (HttpContext.Current.Cache != null)
        {
            if (HttpContext.Current.Cache[cacheKey] == null)
            {
                HttpContext.Current.Cache.Add(cacheKey, objToCache, null, DateTime.UtcNow.AddSeconds((double)cacheLevel), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Default, null);
            }
        }
    }

这在开发和生产中都会发生。我们在Windows Server 2008 R2 Sp1上使用C#和IIS 7.5

更新:这是我们用来检索要显示的项目的代码,以防可能出现问题。

public static T GetFromCache<T>(string cacheKey)
{
    object cachedObj = HttpContext.Current.Cache[cacheKey];

    if (cachedObj != null)
    {
        return (T)cachedObj;
    }
    return default(T);
}

UPDATE#2:正在缓存的项目全部使用.NET用户控件(ascx)显示,以防万一。我们使用Ektron作为我们的CMS。

UPDATE 04/16 我使用了CacheItemRemovedCallback委托,并在我的开发站点上从缓存中删除了记录的项目。当我在初始加载后20分钟刷新页面(缓存过期设置为5分钟)时,会出现相同的时间戳,并且没有任何内容添加到我的日志中。日志中还有一些其他项目“Reason:Removed”。只有一个项目出现“Reason:Expired”,但它不是我正在测试的菜单。因此,似乎至少有一个控件正常工作,而其他控件则不然。

0 个答案:

没有答案