public override void Set(string key, object value, CacheItemPolicy policy, string regionName = null)
        {
            ValidatePolicy(policy);
            try
            {
                DateTime utcExpiry;
                if (policy.SlidingExpiration != NoSlidingExpiration)
                {
                    utcExpiry = DateTime.UtcNow + policy.SlidingExpiration;
                    value     = new SlidingExpiryCacheItem(value, policy.SlidingExpiration);
                }
                else
                {
                    utcExpiry = policy.AbsoluteExpiration.UtcDateTime;
                }

                cache.Set(key, value, utcExpiry, regionName);
            }
            catch (Exception e)
            {
                LogUtility.LogError("Error in Set: " + e.Message);
                if (configuration.ThrowOnError)
                {
                    throw;
                }
            }
        }
        public override object AddOrGetExisting(string key, object value, CacheItemPolicy policy, string regionName = null)
        {
            ValidatePolicy(policy);
            try
            {
                DateTime utcExpiry;
                if (policy.SlidingExpiration != NoSlidingExpiration)
                {
                    utcExpiry = DateTime.UtcNow + policy.SlidingExpiration;
                    value     = new SlidingExpiryCacheItem(value, policy.SlidingExpiration);
                }
                else
                {
                    utcExpiry = policy.AbsoluteExpiration.UtcDateTime;
                }

                object oldValue = cache.AddOrGetExisting(key, value, utcExpiry, regionName);
                oldValue = HandleSlidingExpiry(key, oldValue, regionName);
                return(oldValue);
            }
            catch (Exception e)
            {
                LogUtility.LogError("Error in AddOrGetExisting: " + e.Message);
                if (configuration.ThrowOnError)
                {
                    throw;
                }
            }
            return(null);
        }
        private object HandleSlidingExpiry(string key, object value, string regionName)
        {
            SlidingExpiryCacheItem item = value as SlidingExpiryCacheItem;

            if (item == null)
            {
                return(value);
            }

            cache.ResetExpiry(key, DateTime.UtcNow + item.SlidingExpiration, regionName);
            return(item.Value);
        }