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); }
/// <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); }
/// <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); }