我正在尝试在我们的一个项目中实现缓存。
我对框架的这一部分没有经验,所以我可能做错了什么
使用我在Code Review(https://codereview.stackexchange.com/questions/48148/generic-thread-safe-memorycache-manager-for-c)找到的代码,我或多或少地提出了相同的代码 - 添加了向缓存添加列表的功能。
我有这个(只显示我正在使用的代码):
private CacheItemPolicy _defaultCacheItemPolicy = new CacheItemPolicy()
{
SlidingExpiration = new TimeSpan(0, 15, 0)
};
public CacheUtil(string cacheName)
: base(cacheName) { }
public void Set(string cacheKey, Func<T> getData)
{
this.Set(cacheKey, getData(), _defaultCacheItemPolicy);
}
public bool TryGetAndSet(string cacheKey, Func<List<T>> getData, out List<T> returnData)
{
if (TryGet(cacheKey, out returnData))
{
return true;
}
returnData = getData();
this.Set(cacheKey, returnData, _defaultCacheItemPolicy);
return true;
}
public bool TryGet(string cacheKey, out List<T> returnItem)
{
returnItem = (List<T>)this[cacheKey];
return returnItem != null;
}
我可以通过这样做来调用它:
public override List<T> GetAll()
{
string keyName = typeof(T).ToString();
List<T> t;
_cache.TryGetAndSet(keyName, () => base.GetAll(), out t);
return t;
}
base.GetAll()
是存储库类中的一个函数,它通过EF获取数据。
如果我拨打我的GetAll()
两次,它会将列表再次设置到缓存中 - returnItem = (List<T>)this[cacheKey];
每次都会出现null
。
我做错了什么?