System.Runtime.Caching中MemoryCache帮助类

值得参考的几个内存缓存帮助类:

 

参考资料:

https://github.com/Hendy/memory-cache-helper

 

https://gist.github.com/jdalley/0cc8caed02845ad5a6006e4db1267720

 

https://gist.github.com/jwcarroll/4060539

 

https://github.com/khalidsalomao/SimpleHelpers.Net/blob/master/SimpleHelpers/MemoryCache.cs

public static class CacheHelper
{
    private static readonly Object _locker = new object();

    public static T GetCacheItem<T>(String key, Func<T> cachePopulate, TimeSpan? slidingExpiration = null, DateTime? absoluteExpiration = null)
    {
        if(String.IsNullOrWhiteSpace(key)) throw new ArgumentException("Invalid cache key");
        if(cachePopulate == null) throw new ArgumentNullException("cachePopulate");
        if(slidingExpiration == null && absoluteExpiration == null) throw new ArgumentException("Either a sliding expiration or absolute must be provided");

        if(MemoryCache.Default[key] == null)
        {
            lock(_locker)
            {
                if(MemoryCache.Default[key] == null)
                {
                    var item = new CacheItem(key, cachePopulate());
                    var policy = CreatePolicy(slidingExpiration, absoluteExpiration);

                    MemoryCache.Default.Add(item, policy);
                }
            }
        }

        return (T)MemoryCache.Default[key];
    }

    private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration)
    {
        var policy = new CacheItemPolicy();

        if(absoluteExpiration.HasValue)
        {
            policy.AbsoluteExpiration = absoluteExpiration.Value;
        }
        else if(slidingExpiration.HasValue)
        {
            policy.SlidingExpiration = slidingExpiration.Value;
        }

        policy.Priority = CacheItemPriority.Default;

        return policy;
    }
}
posted @ 2019-05-09 00:51  海尔卡特  阅读(799)  评论(0编辑  收藏  举报