示例#1
0
 public CacheBaseItem(
     string key,
     CacheItemBaseDependency[] dependencies,
     DateTime absoluteExpiration,
     TimeSpan slidingExpiration,
     PriorityLevel priority,
     CacheRemovedCallback onRemoveCallback)
 {
     this.Key                = key;
     this.Dependencies       = dependencies;
     this.AbsoluteExpiration = absoluteExpiration;
     this.SlidingExpiration  = slidingExpiration;
     this.Priority           = priority;
     this.OnRemoveCallback   = onRemoveCallback;
 }
示例#2
0
 public void Add(string key, object value, DateTime absoluteExpiration, CacheRemovedCallback callback = null)
 {
     var policy = new CacheItemPolicy
     {
         AbsoluteExpiration = absoluteExpiration
     };
     if (callback != null)
     {
         policy.RemovedCallback = delegate(CacheEntryRemovedArguments args)
         {
             callback(new CacheRemovedCallbackArgs
             {
                 Key = args.CacheItem.Key,
                 Value = args.CacheItem.Value
             });
         };
     }
     MemoryCache.Default.Add(key, value, policy);
 }
示例#3
0
        public void Add(string key, object value, DateTime absoluteExpiration, CacheRemovedCallback callback = null)
        {
            var policy = new CacheItemPolicy
            {
                AbsoluteExpiration = absoluteExpiration
            };

            if (callback != null)
            {
                policy.RemovedCallback = delegate(CacheEntryRemovedArguments args)
                {
                    callback(new CacheRemovedCallbackArgs
                    {
                        Key   = args.CacheItem.Key,
                        Value = args.CacheItem.Value
                    });
                };
            }
            MemoryCache.Default.Add(key, value, policy);
        }
示例#4
0
 /// <summary>
 /// Adds the specified key.
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="value">The value.</param>
 /// <param name="absoluteExpiration">The absolute expiration.</param>
 /// <param name="callback">The callback.</param>
 public void Add(string key, object value, DateTime absoluteExpiration, CacheRemovedCallback callback)
 {
     ParentCache().Add(RegionKey(key), value, absoluteExpiration, callback);
 }
示例#5
0
 /// <summary>
 /// Adds the specified key.
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="value">The value.</param>
 /// <param name="slidingExpiration">The sliding expiration.</param>
 /// <param name="callback">The callback.</param>
 public void Add(string key, object value, TimeSpan slidingExpiration, CacheRemovedCallback callback)
 {
     ParentCache().Add(RegionKey(key), value, slidingExpiration, callback);
 }
示例#6
0
 public abstract object Add(string key, object value, CacheItemBaseDependency[] dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheBaseItem.PriorityLevel priority, CacheRemovedCallback onRemoveCallback);
示例#7
0
文件: ICache.cs 项目: Epitomy/CMS
        public static T GetOrAdd <T>(this ICache cache, string key, DateTime absoluteExpiration, Func <T> func, CacheRemovedCallback callback = null)
        {
            var obj = Get <T>(cache, key);

            if (obj == null)
            {
                obj = func();
                if (obj == null)
                {
                    return(default(T));
                }

                cache.Add(key, obj, absoluteExpiration, callback);
            }

            return(obj);
        }
示例#8
0
 public void Add(string key, object value, DateTime absoluteExpiration, CacheRemovedCallback callback)
 {
     ParentCache().Add(RegionKey(key), value, absoluteExpiration, callback);
 }
示例#9
0
 public void Add(string key, object value, TimeSpan slidingExpiration, CacheRemovedCallback callback)
 {
     ParentCache().Add(RegionKey(key), value, slidingExpiration, callback);
 }
        public override object Add(string key, object value, CacheItemBaseDependency[] dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheBaseItem.PriorityLevel priority, CacheRemovedCallback onRemoveCallback)
        {
            CacheItemPriority aspnetPriority;

            switch (priority)
            {
            case CacheBaseItem.PriorityLevel.Low:
                aspnetPriority = CacheItemPriority.Low;
                break;

            case CacheBaseItem.PriorityLevel.BelowNormal:
                aspnetPriority = CacheItemPriority.BelowNormal;
                break;

            case CacheBaseItem.PriorityLevel.Normal:
                aspnetPriority = CacheItemPriority.Normal;
                break;

            case CacheBaseItem.PriorityLevel.AboveNormal:
                aspnetPriority = CacheItemPriority.AboveNormal;
                break;

            case CacheBaseItem.PriorityLevel.High:
                aspnetPriority = CacheItemPriority.High;
                break;

            case CacheBaseItem.PriorityLevel.NotRemovable:
                aspnetPriority = CacheItemPriority.NotRemovable;
                break;

            default:
                throw new Exception("Unknown CacheBaseItem.PriorityLevel " + priority);
            }

            CacheDependency dependency = null;

            if (dependencies != null)
            {
                foreach (var d in dependencies)
                {
                    if (d is CacheItemFilesDependency)
                    {
                        dependency = new CacheDependency(((CacheItemFilesDependency)d).Files);
                    }
                    else if (d is CacheItemKeysDependency)
                    {
                        dependency = new CacheDependency(null, ((CacheItemKeysDependency)d).Keys);
                    }
                }
            }

            return(this.Cache.Add(
                       key,
                       value,
                       dependency,
                       absoluteExpiration,
                       slidingExpiration,
                       aspnetPriority,
                       onRemoveCallback == null ? null : new CacheItemRemovedCallback((k, v, r) =>
            {
                CacheRemovedReason reason;
                switch (r)
                {
                case CacheItemRemovedReason.Removed:
                    reason = CacheRemovedReason.Removed;
                    break;

                case CacheItemRemovedReason.DependencyChanged:
                    reason = CacheRemovedReason.DependencyChanged;
                    break;

                case CacheItemRemovedReason.Expired:
                    reason = CacheRemovedReason.Expired;
                    break;

                case CacheItemRemovedReason.Underused:
                    reason = CacheRemovedReason.Underused;
                    break;

                default:
                    throw new Exception("Unknown CacheRemovedReason " + r);
                }
                onRemoveCallback(k, v, reason);
            })
                       ));
        }
        public override object Add(string key, object value, CacheItemBaseDependency[] dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheBaseItem.PriorityLevel priority, CacheRemovedCallback onRemoveCallback)
        {
            var policy = new CacheItemPolicy();

            switch (priority)
            {
            case CacheBaseItem.PriorityLevel.Low:
            case CacheBaseItem.PriorityLevel.BelowNormal:
            case CacheBaseItem.PriorityLevel.Normal:
            case CacheBaseItem.PriorityLevel.AboveNormal:
            case CacheBaseItem.PriorityLevel.High:
                policy.Priority = System.Runtime.Caching.CacheItemPriority.Default;
                break;

            case CacheBaseItem.PriorityLevel.NotRemovable:
                policy.Priority = CacheItemPriority.NotRemovable;
                break;

            default:
                throw new Exception("Unknown CacheBaseItem.PriorityLevel " + priority);
            }

            if (absoluteExpiration != CacheManager.NoAbsoluteExpiration)
            {
                policy.AbsoluteExpiration = absoluteExpiration;
            }
            if (slidingExpiration != CacheManager.NoSlidingExpiration)
            {
                policy.SlidingExpiration = slidingExpiration;
            }
            if (dependencies != null)
            {
                foreach (var d in dependencies)
                {
                    if (d is CacheItemFilesDependency)
                    {
                        var filesMonitor = new HostFileChangeMonitor(((CacheItemFilesDependency)d).Files);
                        policy.ChangeMonitors.Add(filesMonitor);
                    }
                    else if (d is CacheItemKeysDependency)
                    {
                        policy.ChangeMonitors.Add(this.Cache.CreateCacheEntryChangeMonitor(((CacheItemKeysDependency)d).Keys));
                    }
                }
            }

            if (onRemoveCallback != null)
            {
                policy.RemovedCallback = new CacheEntryRemovedCallback((a) =>
                {
                    CacheRemovedReason reason;
                    switch (a.RemovedReason)
                    {
                    case CacheEntryRemovedReason.Removed:
                        reason = CacheRemovedReason.Removed;
                        break;

                    case CacheEntryRemovedReason.ChangeMonitorChanged:
                        reason = CacheRemovedReason.DependencyChanged;
                        break;

                    case CacheEntryRemovedReason.Expired:
                        reason = CacheRemovedReason.Expired;
                        break;

                    case CacheEntryRemovedReason.Evicted:
                    case CacheEntryRemovedReason.CacheSpecificEviction:
                        reason = CacheRemovedReason.Underused;
                        break;

                    default:
                        throw new Exception("Unknown CacheRemovedReason " + a.RemovedReason);
                    }
                    onRemoveCallback(a.CacheItem.Key, a.CacheItem.Value, reason);
                });
            }

            return(this.Cache.Add(key, value, policy));
        }