From a70b31e13734a4d8b5ba6074d16acc2f5e4519da Mon Sep 17 00:00:00 2001 From: "Tony V. Ben Coker" Date: Thu, 21 Mar 2013 13:22:22 +0100 Subject: [PATCH 1/2] Added the ability to cachepools as cachepolicy. --- .../EnyimMemcachedProvider.cs | 14 +++++++------- .../ProxyRequestExtensions.cs | 8 +++++++- src/DR.Sleipner/CachePolicy.cs | 1 + .../DictionaryCache/DictionaryCache.cs | 4 ++-- src/DR.Sleipner/CacheProviders/ICacheProvider.cs | 4 ++-- .../Config/IMethodFamilyConfigurationExpression.cs | 3 +++ .../Config/MethodFamilyConfigExpression.cs | 7 +++++++ 7 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/DR.Sleipner.EnyimMemcachedProvider/EnyimMemcachedProvider.cs b/src/DR.Sleipner.EnyimMemcachedProvider/EnyimMemcachedProvider.cs index 91a7449..56aa5f4 100644 --- a/src/DR.Sleipner.EnyimMemcachedProvider/EnyimMemcachedProvider.cs +++ b/src/DR.Sleipner.EnyimMemcachedProvider/EnyimMemcachedProvider.cs @@ -26,7 +26,7 @@ public EnyimMemcachedProvider(IMemcachedClient client) public CachedObject GetItem(ProxyRequest proxyRequest, CachePolicy cachePolicy) { - var key = proxyRequest.CreateHash(); + var key = proxyRequest.CreateHash(cachePolicy.CachePool); object value; if (_client.TryGet(key, out value)) @@ -56,7 +56,7 @@ public CachedObject GetItem(ProxyRequest proxyRequ public void StoreItem(ProxyRequest proxyRequest, CachePolicy cachePolicy, TResult item) { - var key = proxyRequest.CreateHash(); + var key = proxyRequest.CreateHash(cachePolicy.CachePool); var cachedObject = new MemcachedObject() { Created = DateTime.Now, @@ -75,7 +75,7 @@ public void StoreItem(ProxyRequest proxyRequest, CachePolic public void StoreException(ProxyRequest proxyRequest, CachePolicy cachePolicy, Exception exception) { - var key = proxyRequest.CreateHash(); + var key = proxyRequest.CreateHash(cachePolicy.CachePool); var cachedObject = new MemcachedObject() { Created = DateTime.Now, @@ -93,13 +93,13 @@ public void StoreException(ProxyRequest proxyRequest, Cache } } - public void Purge(Expression> expression) + public void Purge(Expression> expression, string cachePool) { var methodInfo = SymbolExtensions.GetMethodInfo(expression); var parameters = SymbolExtensions.GetParameter(expression); var proxyExpression = new ProxyRequest(methodInfo, parameters); - var hash = proxyExpression.CreateHash(); + var hash = proxyExpression.CreateHash(cachePool); _client.Remove(hash); } @@ -116,9 +116,9 @@ public void Exterminatus() throw new NotImplementedException("Exterminatus cannot be performed on a memcached based provider (it would exterminate the entire memcached cluster)"); } - public bool TryGetRaw(ProxyRequest proxyRequest, out object result) + public bool TryGetRaw(ProxyRequest proxyRequest, out object result, string cachePool) { - var key = proxyRequest.CreateHash(); + var key = proxyRequest.CreateHash(cachePool); object value; if (_client.TryGet(key, out value)) { diff --git a/src/DR.Sleipner.EnyimMemcachedProvider/ProxyRequestExtensions.cs b/src/DR.Sleipner.EnyimMemcachedProvider/ProxyRequestExtensions.cs index 17b6fac..faa4b6b 100644 --- a/src/DR.Sleipner.EnyimMemcachedProvider/ProxyRequestExtensions.cs +++ b/src/DR.Sleipner.EnyimMemcachedProvider/ProxyRequestExtensions.cs @@ -11,14 +11,20 @@ namespace DR.Sleipner.EnyimMemcachedProvider { public static class ProxyRequestExtensions { - public static string CreateHash(this ProxyRequest proxyRequest) where T : class + public static string CreateHash(this ProxyRequest proxyRequest, string cachePool) where T : class { var sb = new StringBuilder(); sb.Append(typeof (T).FullName); sb.Append(" - "); sb.Append(proxyRequest.Method); + if (!string.IsNullOrWhiteSpace(cachePool)) + { + sb.Append(" - "); + sb.Append(cachePool); + } sb.Append(" - "); sb.AddParameterRepresentations(proxyRequest.Parameters); + var bytes = Encoding.UTF8.GetBytes(sb.ToString()); var hashAlgorithm = new SHA256Managed(); diff --git a/src/DR.Sleipner/CachePolicy.cs b/src/DR.Sleipner/CachePolicy.cs index a329515..a17802f 100644 --- a/src/DR.Sleipner/CachePolicy.cs +++ b/src/DR.Sleipner/CachePolicy.cs @@ -6,5 +6,6 @@ public class CachePolicy public int MaxAge; public int ExceptionCacheDuration = 10; public bool BubbleExceptions; + public string CachePool = ""; } } \ No newline at end of file diff --git a/src/DR.Sleipner/CacheProviders/DictionaryCache/DictionaryCache.cs b/src/DR.Sleipner/CacheProviders/DictionaryCache/DictionaryCache.cs index 6472c83..e7ed856 100644 --- a/src/DR.Sleipner/CacheProviders/DictionaryCache/DictionaryCache.cs +++ b/src/DR.Sleipner/CacheProviders/DictionaryCache/DictionaryCache.cs @@ -56,7 +56,7 @@ public void StoreException(ProxyRequest proxyRequest, Cache _cache[cacheKey] = new DictionaryCachedItem(exception, duration, absoluteDuration); } - public void Purge(Expression> expression) + public void Purge(Expression> expression, string cachePool) { var methodInfo = SymbolExtensions.GetMethodInfo(expression); var parameters = SymbolExtensions.GetParameter(expression); @@ -76,7 +76,7 @@ public void Exterminatus() _cache.Clear(); } - public bool TryGetRaw(ProxyRequest proxyRequest, out object result) + public bool TryGetRaw(ProxyRequest proxyRequest, out object result, string cachePool) { var cacheKey = new DictionaryCacheKey(proxyRequest.Method, proxyRequest.Parameters); if (_cache.ContainsKey(cacheKey)) diff --git a/src/DR.Sleipner/CacheProviders/ICacheProvider.cs b/src/DR.Sleipner/CacheProviders/ICacheProvider.cs index c58295a..628280f 100644 --- a/src/DR.Sleipner/CacheProviders/ICacheProvider.cs +++ b/src/DR.Sleipner/CacheProviders/ICacheProvider.cs @@ -16,10 +16,10 @@ public interface ICacheProvider where T : class void StoreItem(ProxyRequest proxyRequest, CachePolicy cachePolicy, TResult item); void StoreException(ProxyRequest proxyRequest, CachePolicy cachePolicy, Exception exception); - void Purge(Expression> expression); + void Purge(Expression> expression, string cachePool = ""); CachedObjectState GetItemState(Expression> action); void Exterminatus(); - bool TryGetRaw(ProxyRequest proxyRequest, out object result); + bool TryGetRaw(ProxyRequest proxyRequest, out object result, string cachePool = ""); } } \ No newline at end of file diff --git a/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs b/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs index a0e846a..331ebb5 100644 --- a/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs +++ b/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs @@ -41,5 +41,8 @@ public interface IMethodFamilyConfigurationExpression /// /// IMethodFamilyConfigurationExpression BubbleExceptionsWhenStale(); + + /// Cake of hest and win + IMethodFamilyConfigurationExpression CachePool(string name); } } diff --git a/src/DR.Sleipner/Config/MethodFamilyConfigExpression.cs b/src/DR.Sleipner/Config/MethodFamilyConfigExpression.cs index d4c3ffa..db883ac 100644 --- a/src/DR.Sleipner/Config/MethodFamilyConfigExpression.cs +++ b/src/DR.Sleipner/Config/MethodFamilyConfigExpression.cs @@ -51,5 +51,12 @@ public IMethodFamilyConfigurationExpression BubbleExceptionsWhenStale() return this; } + + public IMethodFamilyConfigurationExpression CachePool(string name) + { + _policy.CachePool = name; + + return this; + } } } From b3eceb3a62372d5078d64a7d084a267bbfdad65f Mon Sep 17 00:00:00 2001 From: "Tony V. Ben Coker" Date: Thu, 21 Mar 2013 13:35:05 +0100 Subject: [PATCH 2/2] Added summary --- .../Config/IMethodFamilyConfigurationExpression.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs b/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs index 331ebb5..ec64e87 100644 --- a/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs +++ b/src/DR.Sleipner/Config/IMethodFamilyConfigurationExpression.cs @@ -42,7 +42,10 @@ public interface IMethodFamilyConfigurationExpression /// IMethodFamilyConfigurationExpression BubbleExceptionsWhenStale(); - /// Cake of hest and win + /// + /// This is used to set a cachepool name. + /// + /// IMethodFamilyConfigurationExpression CachePool(string name); } }