private void LinkDependencies(KeyConfigurationElement key, DependencyConfigurationElement dependency) { if (string.IsNullOrEmpty(dependency.Key.Name)) { var subList = Config.Groups.Where(g => g.Name == dependency.Group.Name); foreach (var element in subList) { foreach (var subElement in element.Keys) { key.DependenciesReference.Add(subElement); } } } else { var matchingGroup = Config.Groups.FirstOrDefault(g => g.Name == dependency.Group.Name); if (matchingGroup != null) { var dependentKey = matchingGroup.Keys.FirstOrDefault(k => k.Name == dependency.Key.Name); if (dependentKey != null) { key.DependenciesReference.Add(dependentKey); } } } }
public CircuitBreakerHelper(CachingHelper cachingHelper, LoggingHelper loggingHelper) { this._cachingHelper = cachingHelper; this._hashTableConfigElement = _cachingHelper.Config.Groups.FirstOrDefault(group => group.Name == "Helpers.CircuitBreakerHelper").Keys.FirstOrDefault(key => key.Name == "HashTable"); this._circuitConfigElement = _cachingHelper.Config.Groups.FirstOrDefault(group => group.Name == "Helpers.CircuitBreakerHelper").Keys.FirstOrDefault(key => key.Name == "Circuit"); }
private string GetKey(KeyConfigurationElement keyElement, string modifier) { string hashedModifier = null; if (!string.IsNullOrEmpty(modifier)) { hashedModifier = modifier.ToMD5(); } return(string.Format("{0}{1}{2}{3}", environmentUrl, keyElement.Group.Name, keyElement.Name, hashedModifier)); }
public void AddCacheItem <T>(KeyConfigurationElement cacheKeyElement, T value, string modifier = null) { //do a final sanity check on the input data if (!typeof(T).IsSerializable) { throw new MissingFieldException("Object being cached is not marked with Serializable attribute, and was not cached"); } var currentTimestamp = DateTime.Now; var dependenciesTable = GetDependenciesTable(); var fullKey = GetKey(cacheKeyElement, modifier); //init cache expirydate DateTime?expiryDate = null; if (cacheKeyElement.Expiry != null) { expiryDate = currentTimestamp.AddMinutes(cacheKeyElement.Expiry.Value); } //process dependencies if (modifier == null) { foreach (var dependency in cacheKeyElement.DependenciesReference) { var dependencyKey = GetKey(dependency, null); if (!dependenciesTable.ContainsKey(dependencyKey)) { dependenciesTable[dependencyKey] = new HashSet <string>(); } dependenciesTable[dependencyKey].Add(fullKey); //adjust cache expirydate based on existing dependency expirydates (so they expire at the same time at most) if (dependency.Expiry != null) { var dependencyExpiry = currentTimestamp.AddMinutes(dependency.Expiry.Value); if (expiryDate == null || expiryDate.Value > dependencyExpiry) { expiryDate = dependencyExpiry; } } } SetDependenciesTable(dependenciesTable); } //expire any dependent items if (dependenciesTable.ContainsKey(fullKey)) { foreach (var dependentItem in dependenciesTable[fullKey]) { ClearCacheItem(dependentItem); } } //save to cache if (expiryDate.HasValue) { memcachedClient.Store(Enyim.Caching.Memcached.StoreMode.Set, fullKey, value, expiryDate.Value); } else { memcachedClient.Store(Enyim.Caching.Memcached.StoreMode.Set, fullKey, value); } }
public void ClearCacheItem(KeyConfigurationElement cacheKeyElement, string modifier = null) { var fullKey = GetKey(cacheKeyElement, modifier); ClearCacheItem(fullKey); }
public T GetCacheItem <T>(KeyConfigurationElement cacheKeyElement, string modifier = null) { var fullKey = GetKey(cacheKeyElement, modifier); return(memcachedClient.Get <T>(fullKey)); }