Created
November 12, 2012 17:03
-
-
Save jwcarroll/4060539 to your computer and use it in GitHub Desktop.
Cache Helper to make using the Memory cache a little easier
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment