MemoryCache似乎不是缓存

时间:2016-06-10 14:37:17

标签: c# caching memorycache

我正在尝试在我们的一个项目中实现缓存。

我对框架的这一部分没有经验,所以我可能做错了什么

使用我在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

我做错了什么?

0 个答案:

没有答案