예제 #1
0
파일: Cache.cs 프로젝트: RahmanM/RedCache
        private void AddWithSqlDependency(string key, TValue item, SqlCacheDependency sqlDependency)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            if (sqlDependency == null)
            {
                throw new ArgumentNullException(nameof(sqlDependency));
            }

            _Cache.SetObject(key, new CacheItem <TValue>()
            {
                AbsoluteExpiration = DateTime.MinValue,
                SlidingExpiration  = TimeSpan.Zero,
                Item = item
            });

            Policy.Handle <Exception>()
            .RetryForever()
            .Execute(() =>
            {
                // subscribe to sql dependency
                _channel = new ChangeTrackingChannelHelper((ISqlChangeCallback)this).OpenChannel();
                _channel.Subscribe(key, sqlDependency.TableName);
            }
                     );

            // subscribe client for callback
            SubscribeCallback(key, sqlDependency.Callback);
        }
예제 #2
0
파일: Cache.cs 프로젝트: RahmanM/RedCache
        public TValue GetOrAdd(string key, Func <TValue> item, SqlCacheDependency sqlDependency)
        {
            var itemFromCache = Get(key);

            if (!EqualityComparer <TValue> .Default.Equals(itemFromCache, default(TValue)))
            {
                return(itemFromCache);
            }

            var result = item();

            AddWithSqlDependency(key, result, sqlDependency);

            return(result);
        }
예제 #3
0
파일: Cache.cs 프로젝트: RahmanM/RedCache
        public void Add(string key, TValue item, SqlCacheDependency sqlDependency, string[] tags)
        {
            AddWithSqlDependency(key, item, sqlDependency);

            _Cache.AddTagsToKey(key, tags);
        }
예제 #4
0
파일: Cache.cs 프로젝트: RahmanM/RedCache
 public void Add(string key, TValue item, SqlCacheDependency sqlDependency)
 {
     AddWithSqlDependency(key, item, sqlDependency);
 }