示例#1
0
        public T Get <T>(string key, Func <T> getFunc, string group = null)
        {
            var val = repo.Get(key);

            if (val != null)
            {
                return((T)val);
            }

            if (group != null)
            {
                groups.AddOrUpdate(
                    group,
                    g => new Tuple <object, HashSet <string> >(new object(), new HashSet <string> {
                    key
                }),
                    (gname, tuple) =>
                {
                    lock (tuple.Item1)
                    {
                        tuple.Item2.Add(key);
                    }

                    return(tuple);
                });
            }

            val = getFunc();

            repo.Insert(key, val);

            return((T)val);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        /// <param name="eh"></param>
        /// <returns></returns>
        internal override bool AddInternal(object key, ExpirationHint eh, OperationContext operationContext)
        {
            if (ServerMonitor.MonitorActivity)
            {
                ServerMonitor.LogClientActivity("LocalCache.Add_2", "");
            }

            if (_cacheStore == null)
            {
                throw new InvalidOperationException();
            }

            CacheEntry e = (CacheEntry)_cacheStore.Get(key);

            if (e == null)
            {
                return(false);
            }

            //We only allow either idle expiration or Fixed expiration both cannot be set at the same time
            if ((e.ExpirationHint is IdleExpiration && eh is FixedExpiration) ||
                (e.ExpirationHint is FixedExpiration && eh is IdleExpiration))
            {
                return(false);
            }

            e.ExpirationHint = eh;
            _cacheStore.Insert(key, e, true);
            e.LastModifiedTime = System.DateTime.Now;


            if (_context.PerfStatsColl != null)
            {
                if (_evictionPolicy != null)
                {
                    _context.PerfStatsColl.SetEvictionIndexSize((long)_evictionPolicy.IndexInMemorySize);
                }

                if (_context.ExpiryMgr != null)
                {
                    _context.PerfStatsColl.SetExpirationIndexSize((long)_context.ExpiryMgr.IndexInMemorySize);
                }
            }

            return(true);
        }
示例#3
0
        /// <summary>
        /// Adiciona uma dependencia de sincronização para o item associado com a chave informada.
        /// </summary>
        /// <param name="key">Chave do item do cache.</param>
        /// <param name="syncDependency">Instancia da dependencia de sincronização.</param>
        /// <returns>True caso a operação tenha sido executada com sucesso.</returns>
        internal override bool AddInternal(object key, CacheSyncDependency syncDependency)
        {
            if (_cacheStore == null)
            {
                throw new InvalidOperationException();
            }
            CacheEntry item = (CacheEntry)_cacheStore.Get(key);

            if (item == null)
            {
                return(false);
            }
            item.SyncDependency = syncDependency;
            _cacheStore.Insert(key, item);
            item.LastModifiedTime = DateTime.Now;
            return(true);
        }