为什么我的cacheaside提供程序不起作用?

时间:2019-03-22 16:32:49

标签: c#

我有一个缓存提供程序:

public static class CacheAsideHelper
    {
public static T GetOrAdd<T>(Func<T> builder, TimeSpan expiresIn, bool ignoreNullValues, params string[] keys)
        {
            var key = GetKey(keys);
            CacheItemWrapper itemWrapper = null;
            var cachedItem = MemoryCache.Default.Get(key);
            if (cachedItem != null)
            {
                itemWrapper = (CacheItemWrapper)cachedItem;
            }

            if (itemWrapper != null && !(DateTime.Now.Subtract(itemWrapper.InsertedAt).TotalSeconds >=
                                         expiresIn.TotalSeconds))
            {
                return (T)itemWrapper.Item;
            }

            ////expired or not in cache
            var item = builder();
            if (item == null && ignoreNullValues)
            {
                return default(T);
            }

            var wrapper = new CacheItemWrapper
            {
                InsertedAt = DateTime.Now,
                Item = item
            };
            MemoryCache.Default.Add(key, wrapper, DateTime.Now.Add(expiresIn));
            return item;
        }
}

这是调用示例:

return (CacheAsideHelper.GetOrAdd(
                () => GetSchema(connectionString, tableName),
                new TimeSpan(Consts.MemoryCacheExchangeRateExpirationHours, 0, 0), true, tableName)).ToList();

我意识到无论数据是否在缓存中,始终都会调用GetSchema函数。

所以我踩了代码,原来是这样:

  1. 代码将命中此行并返回缓存中的项目:

    返回(T)itemWrapper.Item;

  2. 在那之后,它还点击了 GetSchema 函数。

CachAside例程中似乎有一个错误,但是,我的代码看不到任何错误。

0 个答案:

没有答案