【问题标题】:System.Runtime.Caching works locally but does not work when deployed to a web serverSystem.Runtime.Caching 在本地工作,但在部署到 Web 服务器时不起作用
【发布时间】:2018-08-07 19:57:27
【问题描述】:

我在具有多个库的应用程序中使用了以下类 CacheHelper。当我在本地对其进行测试时,缓存工作正常,但是当它部署到网络服务器时,它似乎不起作用(GET 返回 null)。有什么想法吗?

public class CacheHelper
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public object GetValue(string key)
    {
        var memoryCache = MemoryCache.Default;
        return memoryCache.Get(key);
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    /// <param name="absExpiration"></param>
    /// <returns></returns>
    public bool Add(string key, object value, DateTimeOffset absExpiration)
    {
        var memoryCache = MemoryCache.Default;
        return memoryCache.Add(key, value, absExpiration);
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="key"></param>
    public void Delete(string key)
    {
        var memoryCache = MemoryCache.Default;
        if (memoryCache.Contains(key)) memoryCache.Remove(key);
    }
}

在我的应用程序项目中的使用情况:

var cacheHelper = new CacheHelper();
var cachedValue = cacheHelper.GetValue(keyName);

我是这样设置的:

cacheHelper.Add(keyName, cacheValue, DateTimeOffset.UtcNow.AddMinutes(30));

【问题讨论】:

  • 您的网站是否托管在网络场中?是否经常回收应用程序池?
  • 是不是有什么意外调用Delete
  • 不,删除在一个地方,除非主动执行,否则它们不会被调用。站点应用程序池每 1740 分钟回收一次。
  • 利用:msdn.microsoft.com/en-us/library/… 并可能进行一些日志记录以确定何时将项目添加到缓存然后删除。可能有助于解决您的问题。
  • “除非主动执行,否则它们不会被调用” - 会不会有什么意外调用它? “站点应用程序池每 1740 分钟回收一次” - 你知道其他因素会导致它回收吗? (例如,如果我编辑您的 web.config 文件,仅举一个例子)。我认为您需要添加一些日志记录来帮助诊断。附言我只是偶然发现您的回复,您需要在专门回复某人时@标记某人以引起他们的注意。

标签: c# .net asp.net-web-api memorycache


【解决方案1】:

如果您在控制器中使用它,您很可能会根据请求使用新实例。

【讨论】:

  • 这意味着它也不应该在我的本地工作。但确实如此。
猜你喜欢
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
相关资源
最近更新 更多