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;
    }
}

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号