【发布时间】: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