Environment:
asp.net mvc
iis
我在memorycache周围创建了一个包装器和具体类,它在 constrcutor 中设置了memoryCache
public class AbijMemoryCache : IAbijMemoryCache
{
private readonly MemoryCache _cache;
public AbijMemoryCache()
{
if (_cache == null)
{
_cache = MemoryCache.Default;
}
}
}
然后在统一中只获取一个内存缓存实例我使用 ContainerControlledLifetimeManager
container.RegisterType<IAbijMemoryCache, AbijMemoryCache>(new ContainerControlledLifetimeManager());
我使用以下代码
在我的homeController中设置缓存 var policy = new CacheItemPolicy();
_cache.Set(key, value, policy);
但上传到iis缓存后有时会变空。
检查
_cache.Get(key) **`it gets null`**
为什么它变为空? 我该怎么办?
答案 0 :(得分:0)
我发现MemoryCache正在通过引用工作,所以如果你确实将一个对象分配给memoryCache,它会 通过refremce
_cache.Set(key, value, policy); //value should not be an object.
你可以在缓存值之前使用序列化,这样可以像
那样完成 var cloneValue = SerializationCloner.DeepFieldClone(value);