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