Exemplo n.º 1
0
 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);
             }
         }
     }
 }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        public void ClearCacheItem(KeyConfigurationElement cacheKeyElement, string modifier = null)
        {
            var fullKey = GetKey(cacheKeyElement, modifier);

            ClearCacheItem(fullKey);
        }
Exemplo n.º 6
0
        public T GetCacheItem <T>(KeyConfigurationElement cacheKeyElement, string modifier = null)
        {
            var fullKey = GetKey(cacheKeyElement, modifier);

            return(memcachedClient.Get <T>(fullKey));
        }