/// <summary> /// Adds a new item to the cache. /// </summary> /// <param name="cacheKey">key</param> /// <param name="value">value</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> public void InsertValue(EFCacheKey cacheKey, EFCachedData value, EFCachePolicy cachePolicy) { _readerWriterLockProvider.TryWriteLocked(() => { if (value == null) { value = new EFCachedData { IsNull = true }; } var options = new MemoryCacheEntryOptions { Size = 1 }; if (cachePolicy.CacheExpirationMode == CacheExpirationMode.Absolute) { options.AbsoluteExpirationRelativeToNow = cachePolicy.CacheTimeout; } else { options.SlidingExpiration = cachePolicy.CacheTimeout; } foreach (var rootCacheKey in cacheKey.CacheDependencies) { options.ExpirationTokens.Add(_signal.GetChangeToken(rootCacheKey)); } _memoryCache.Set(cacheKey.KeyHash, value, options); }); }
/// <summary> /// Adds a new item to the cache. /// </summary> /// <param name="cacheKey">key</param> /// <param name="value">value</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> public void InsertValue(EFCacheKey cacheKey, EFCachedData value, EFCachePolicy cachePolicy) { _readerWriterLockProvider.TryWriteLocked(() => { if (value == null) { value = new EFCachedData { IsNull = true }; } var keyHash = cacheKey.KeyHash; foreach (var rootCacheKey in cacheKey.CacheDependencies) { var items = _easyCachingProvider.Get <HashSet <string> >(rootCacheKey); if (items.IsNull) { _easyCachingProvider.Set(rootCacheKey, new HashSet <string> { keyHash }, cachePolicy.CacheTimeout); } else { items.Value.Add(keyHash); _easyCachingProvider.Set(rootCacheKey, items.Value, cachePolicy.CacheTimeout); } } // We don't support Sliding Expiration at this time. -> https://github.com/dotnetcore/EasyCaching/issues/113 _easyCachingProvider.Set(keyHash, value, cachePolicy.CacheTimeout); }); }
/// <summary> /// Adds a new item to the cache. /// </summary> /// <param name="cacheKey">key</param> /// <param name="value">value</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> public void InsertValue(EFCacheKey cacheKey, EFCachedData value, EFCachePolicy cachePolicy) { _readerWriterLockProvider.TryWriteLocked(() => { if (value == null) { value = new EFCachedData { IsNull = true }; } var keyHash = cacheKey.KeyHash; foreach (var rootCacheKey in cacheKey.CacheDependencies) { _dependenciesCacheManager.AddOrUpdate( rootCacheKey, new HashSet <string>(StringComparer.OrdinalIgnoreCase) { keyHash }, updateValue: set => { set.Add(keyHash); return(set); }); } if (cachePolicy == null) { _valuesCacheManager.Add(keyHash, value); } else { _valuesCacheManager.Add(new CacheItem <EFCachedData>( keyHash, value, cachePolicy.CacheExpirationMode == CacheExpirationMode.Absolute ? ExpirationMode.Absolute : ExpirationMode.Sliding, cachePolicy.CacheTimeout)); } }); }
/// <summary> /// Removes the cached entries added by this library. /// </summary> public void ClearAllCachedEntries() { _readerWriterLockProvider.TryWriteLocked(() => _redisDbCache.Clear()); }