рд╡рд┐рдВрдбреЛрдЬ Azure: рдЗрди-рдореЗрдореЛрд░реА рд╡рд┐рддрд░рд┐рдд рдХреИрд╢

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕рд░реНрд╡рд┐рд╕ рдкреИрдХ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЕрдкрдбреЗрдЯ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдЬрдм рд╡рд┐рддрд░рд┐рдд рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ - рдХреИрд╢ рдмрд╣реБрдд рдзреАрд░реЗ рдзреАрд░реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ Windows Azure рдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдХреИрд╢реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реИрдВрдкрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 30-100 ms рд▓рдЧ рдЧрдП, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИред
рддреЛ, рдХреНрдпрд╛ рд╕рдВрдЪрдп рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ?
Microsoft рдиреЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ред рдЕрдм рдбреЗрдЯрд╛ рдХрд┐рд╕реА рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реНрдореГрддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд░рдиреНрдд рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреИрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ASP.NET MVC 3 (рд╕реА #) рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╡рд░реНрд╖ рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред

рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛

рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВ:
public interface ICacheProvider { void RemoveFromCache(string key); T GetFromMethod<T>(string cacheKey, TimeSpan cacheDuration, Func<T> method); T GetFromMethod<T>(string cacheKey, Func<T> method); } 

рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреБрдВрдЬреА рд╕реЗ рдХреИрд╢ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдмрд╛рдХреА рдХреЛ рдХреБрдВрдЬреА рдФрд░ рдЕрд╡рдзрд┐ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЕрдЧрд░ рдХреЛрдИ рдХреИрд╢ рдирд╣реАрдВ рд╣реИ)ред

рдЕрдЧрд▓реЗ рдХрджрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛ рд╣реА рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдПрд╕рдбреАрдХреЗ 1.7 рдХреА рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдЬрд╝реНрдпреЛрд░ рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдШрдЯрдХ рд╣реИрдВ

рд╣рдо рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкреНрд░рджрд╛рддрд╛ рдЦреБрдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 public class AzureCacheProvider : ICacheProvider { //        private readonly string _prefix = StaticHelper.GetCurrentVersion(); private readonly object _locker = new object(); private readonly DataCache _cache; public AzureCacheProvider() { lock (_locker) { { var factory = new DataCacheFactory(); _cache = factory.GetDefaultCache(); } } } private void RemoveFromCache(string key, DataCache cache) { lock (_locker) { cache.Remove(_prefix + key); HttpContext.Current.Items.Remove(_prefix + key); } } private T GetFromCache<T>(string key, TimeSpan expiration, Func<T> method, DataCache cache) { object cacheItem = HttpContext.Current.Items[_prefix + key]; if (cacheItem == null) { cacheItem = cache.Get(_prefix + key); if (cacheItem != null) HttpContext.Current.Items[_prefix + key] = cacheItem; } if (cacheItem == null) { lock (_locker) { cacheItem = cache.Get(_prefix + key); if (cacheItem == null) { cacheItem = method(); if (cacheItem != null) { HttpContext.Current.Items[_prefix + key] = cacheItem; cache.Put(_prefix + key, cacheItem, expiration); } } } } return (T)cacheItem; } public void RemoveFromCache(string key) { RemoveFromCache(key, _cache); } public T GetFromMethod<T>(string cacheKey, TimeSpan expirationSeconds, Func<T> method) { return GetFromCache(cacheKey, expirationSeconds, method, _cache); } public T GetFromMethod<T>(string cacheKey, Func<T> method) { return GetFromMethod(cacheKey, TimeSpan.FromMinutes(15), method); } } ; public class AzureCacheProvider : ICacheProvider { //        private readonly string _prefix = StaticHelper.GetCurrentVersion(); private readonly object _locker = new object(); private readonly DataCache _cache; public AzureCacheProvider() { lock (_locker) { { var factory = new DataCacheFactory(); _cache = factory.GetDefaultCache(); } } } private void RemoveFromCache(string key, DataCache cache) { lock (_locker) { cache.Remove(_prefix + key); HttpContext.Current.Items.Remove(_prefix + key); } } private T GetFromCache<T>(string key, TimeSpan expiration, Func<T> method, DataCache cache) { object cacheItem = HttpContext.Current.Items[_prefix + key]; if (cacheItem == null) { cacheItem = cache.Get(_prefix + key); if (cacheItem != null) HttpContext.Current.Items[_prefix + key] = cacheItem; } if (cacheItem == null) { lock (_locker) { cacheItem = cache.Get(_prefix + key); if (cacheItem == null) { cacheItem = method(); if (cacheItem != null) { HttpContext.Current.Items[_prefix + key] = cacheItem; cache.Put(_prefix + key, cacheItem, expiration); } } } } return (T)cacheItem; } public void RemoveFromCache(string key) { RemoveFromCache(key, _cache); } public T GetFromMethod<T>(string cacheKey, TimeSpan expirationSeconds, Func<T> method) { return GetFromCache(cacheKey, expirationSeconds, method, _cache); } public T GetFromMethod<T>(string cacheKey, Func<T> method) { return GetFromMethod(cacheKey, TimeSpan.FromMinutes(15), method); } } ]; public class AzureCacheProvider : ICacheProvider { //        private readonly string _prefix = StaticHelper.GetCurrentVersion(); private readonly object _locker = new object(); private readonly DataCache _cache; public AzureCacheProvider() { lock (_locker) { { var factory = new DataCacheFactory(); _cache = factory.GetDefaultCache(); } } } private void RemoveFromCache(string key, DataCache cache) { lock (_locker) { cache.Remove(_prefix + key); HttpContext.Current.Items.Remove(_prefix + key); } } private T GetFromCache<T>(string key, TimeSpan expiration, Func<T> method, DataCache cache) { object cacheItem = HttpContext.Current.Items[_prefix + key]; if (cacheItem == null) { cacheItem = cache.Get(_prefix + key); if (cacheItem != null) HttpContext.Current.Items[_prefix + key] = cacheItem; } if (cacheItem == null) { lock (_locker) { cacheItem = cache.Get(_prefix + key); if (cacheItem == null) { cacheItem = method(); if (cacheItem != null) { HttpContext.Current.Items[_prefix + key] = cacheItem; cache.Put(_prefix + key, cacheItem, expiration); } } } } return (T)cacheItem; } public void RemoveFromCache(string key) { RemoveFromCache(key, _cache); } public T GetFromMethod<T>(string cacheKey, TimeSpan expirationSeconds, Func<T> method) { return GetFromCache(cacheKey, expirationSeconds, method, _cache); } public T GetFromMethod<T>(string cacheKey, Func<T> method) { return GetFromMethod(cacheKey, TimeSpan.FromMinutes(15), method); } } ; public class AzureCacheProvider : ICacheProvider { //        private readonly string _prefix = StaticHelper.GetCurrentVersion(); private readonly object _locker = new object(); private readonly DataCache _cache; public AzureCacheProvider() { lock (_locker) { { var factory = new DataCacheFactory(); _cache = factory.GetDefaultCache(); } } } private void RemoveFromCache(string key, DataCache cache) { lock (_locker) { cache.Remove(_prefix + key); HttpContext.Current.Items.Remove(_prefix + key); } } private T GetFromCache<T>(string key, TimeSpan expiration, Func<T> method, DataCache cache) { object cacheItem = HttpContext.Current.Items[_prefix + key]; if (cacheItem == null) { cacheItem = cache.Get(_prefix + key); if (cacheItem != null) HttpContext.Current.Items[_prefix + key] = cacheItem; } if (cacheItem == null) { lock (_locker) { cacheItem = cache.Get(_prefix + key); if (cacheItem == null) { cacheItem = method(); if (cacheItem != null) { HttpContext.Current.Items[_prefix + key] = cacheItem; cache.Put(_prefix + key, cacheItem, expiration); } } } } return (T)cacheItem; } public void RemoveFromCache(string key) { RemoveFromCache(key, _cache); } public T GetFromMethod<T>(string cacheKey, TimeSpan expirationSeconds, Func<T> method) { return GetFromCache(cacheKey, expirationSeconds, method, _cache); } public T GetFromMethod<T>(string cacheKey, Func<T> method) { return GetFromMethod(cacheKey, TimeSpan.FromMinutes(15), method); } } ; public class AzureCacheProvider : ICacheProvider { //        private readonly string _prefix = StaticHelper.GetCurrentVersion(); private readonly object _locker = new object(); private readonly DataCache _cache; public AzureCacheProvider() { lock (_locker) { { var factory = new DataCacheFactory(); _cache = factory.GetDefaultCache(); } } } private void RemoveFromCache(string key, DataCache cache) { lock (_locker) { cache.Remove(_prefix + key); HttpContext.Current.Items.Remove(_prefix + key); } } private T GetFromCache<T>(string key, TimeSpan expiration, Func<T> method, DataCache cache) { object cacheItem = HttpContext.Current.Items[_prefix + key]; if (cacheItem == null) { cacheItem = cache.Get(_prefix + key); if (cacheItem != null) HttpContext.Current.Items[_prefix + key] = cacheItem; } if (cacheItem == null) { lock (_locker) { cacheItem = cache.Get(_prefix + key); if (cacheItem == null) { cacheItem = method(); if (cacheItem != null) { HttpContext.Current.Items[_prefix + key] = cacheItem; cache.Put(_prefix + key, cacheItem, expiration); } } } } return (T)cacheItem; } public void RemoveFromCache(string key) { RemoveFromCache(key, _cache); } public T GetFromMethod<T>(string cacheKey, TimeSpan expirationSeconds, Func<T> method) { return GetFromCache(cacheKey, expirationSeconds, method, _cache); } public T GetFromMethod<T>(string cacheKey, Func<T> method) { return GetFromMethod(cacheKey, TimeSpan.FromMinutes(15), method); } } 


HttpContext.Current.Items рдлрд┐рд░ рд╕реЗ рдЗрд▓рд╛рдЬ рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕реНрдореГрддрд┐ рдореЗрдВ рджреБрдХрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рднреВрдорд┐рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕

рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХреИрд╢ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрд╕рдбреАрдХреЗ 1.7 рдореЗрдВ, рднреВрдорд┐рдХрд╛ рдЧреБрдгреЛрдВ рдореЗрдВ рдПрдХ рдирдпрд╛ рдХреИрд╢рд┐рдВрдЧ рдЯреИрдм рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕ рдЯреИрдм рдкрд░, рдХреИрд╢ рд╕рдкреЛрд░реНрдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ (рдХреИрд╢рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ) рдФрд░ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╕рд╣-рд╕реНрдерд┐рдд рднреВрдорд┐рдХрд╛: рдХреИрд╢ рдЖрдХрд╛рд░ 30%)

web.config

рдЕрдВрддрд┐рдо рддреИрдпрд╛рд░реА Web.config рдХреЗ рдирдП рдЦрдВрдбреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧреАред рдпрджрд┐ configSections рдЕрдиреБрднрд╛рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЕрдВрджрд░ рдбрд╛рд▓реЗрдВ:

 <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/> 

Web.config рдХреЗ рдЕрдВрдд рдореЗрдВ dataCacheClients рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:

 <dataCacheClients> <tracing sinkType="DiagnosticSink" traceLevel="Error" /> <dataCacheClient name="default"> <autoDiscover isEnabled="true" identifier="   Web-,       " /> </dataCacheClient> </dataCacheClients> = "рддреНрд░реБрдЯрд┐" /> <dataCacheClients> <tracing sinkType="DiagnosticSink" traceLevel="Error" /> <dataCacheClient name="default"> <autoDiscover isEnabled="true" identifier="   Web-,       " /> </dataCacheClient> </dataCacheClients> 

рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рдХреИрд╢ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ


рдХреИрд╢ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреГрд╖реНрда рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛:

 <h1>Cache test</h1> Before: <%=DateTime.Now.Millisecond%> ms<br/> <%=Facade.Instance.Cache.GetFromMethod("currentTime", () => DateTime.Now)%><br/> After: <%=DateTime.Now.Millisecond%> ms<br/> <%using(Html.BeginForm("ClearCache","Admin"))%> <%{%> <input type="submit" value="Clear Cache"/> <%}%> ", "рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ"))%> <h1>Cache test</h1> Before: <%=DateTime.Now.Millisecond%> ms<br/> <%=Facade.Instance.Cache.GetFromMethod("currentTime", () => DateTime.Now)%><br/> After: <%=DateTime.Now.Millisecond%> ms<br/> <%using(Html.BeginForm("ClearCache","Admin"))%> <%{%> <input type="submit" value="Clear Cache"/> <%}%> 

Facade.Instance.Cache рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, Facade.Instance.Cache рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ AzureCacheProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХрд╛рд░реНрд░рд╡рд╛рдИ ClearCache рд╕рд░рд▓ рдкрд░реНрдпрд╛рдкреНрдд рджрд┐рдЦрддрд╛ рд╣реИ:

 public ActionResult ClearCache() { Facade.Instance.Cache.RemoveFromCache("currentTime"); return View("admin"); } 

рдкрд░рд┐рдгрд╛рдо


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

Cache test
Before: 553 ms
6/10/2012 11:09:40 AM
After: 569 ms


рдкреНрд░рдердо рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рд╕рдВрдЪрдп, рдЬреЛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╣реАрдВ 16ms рд▓реЗрддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рдиреЗ рдЖрддрд╛ рд╣реИред рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдкреГрд╖реНрда рддрд╛рдЬрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

Cache test
Before: 508 ms
6/10/2012 11:09:40 AM
After: 508 ms


рдирдП рдЗрди-рдореЗрдореЛрд░реА рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯреЗрдб рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ 1ms рд╕реЗ рдХрдо рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЧрддрд┐ рд╕реЗ, рдпрд╣ рдХреИрд╢ InProc рдХреИрд╢ рд╕реЗ рдиреАрдЪ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдерд╛?


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдерд╛, рдЖрдкрдХреЛ рдПрд╕рдбреАрдХреЗ рдХреЛ 1.6 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╡реЗрдм.рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд dataCacheClients рд░рд╣реЗ рд╣реИрдВ:

 <dataCacheClients> <dataCacheClient name="default"> <hosts> <host name="[ ID].cache.windows.net" cachePort="22233" /> </hosts> <securityProperties mode="Message"> <messageSecurity authorizationInfo="[ ]"></messageSecurity> </securityProperties> </dataCacheClient> </dataCacheClients> 

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

Cache test
Before: 521 ms
6/10/2012 11:09:40 AM
After: 550 ms


рдпрд╛рдиреА рдХреИрд╢ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж 29 рдПрдордПрд╕:

Cache test
Before: 501 ms
6/10/2012 11:09:40 AM
After: 533 ms


32 рдПрдордПрд╕ рдПрдХ рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкрд░рд┐рдгрд╛рдо


рдирд╡реАрдирддрдо рдирд╡рд╛рдЪрд╛рд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ - рд╡рд┐рддрд░рд┐рдд рдХреИрд╢рд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ред рдЕрдм рдЖрдк рдПрдХ рд╡рд┐рддрд░рд┐рдд рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ, рдЧрд┐рд░рд╛рд╡рдЯ рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдбрд░ рдХреЗ рдмрд┐рдирд╛ рдЬрдмрдХрд┐ рдЬреЛ рд▓реЛрдЧ Azure рдмрд╛рджрд▓ рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдХрд░рддреЗ рдереЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ Windows Azure рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In145800/


All Articles