using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Core.Caches { public class MemoryCacheService : ICacheService { protected IMemoryCache _cache; public MemoryCacheService(IMemoryCache cache) { _cache = cache; } public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false) { return AddObject(key, value, expireSeconds, isSliding); } public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false) { if (expireSeconds != -1) { _cache.Set(key, value, new MemoryCacheEntryOptions() .SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds)) ); } else { _cache.Set(key, value); } return true; } public void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false) { if (!string.IsNullOrEmpty(Get(key))) { Remove(key); Add(key, value, expireSeconds, isSliding); } else { Add(key, value, expireSeconds, isSliding); } } public void Dispose() { if (_cache != null) _cache.Dispose(); GC.SuppressFinalize(this); } public bool Exists(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } return _cache.Get(key) != null; } public T Get(string key) where T : class { if (key == null) { throw new ArgumentNullException(nameof(key)); } return _cache.Get(key) as T; } public string Get(string key) { try { return _cache.Get(key)?.ToString(); } catch { return string.Empty; } } public bool Remove(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } _cache.Remove(key); return !Exists(key); } public void Remove(IEnumerable keys) { if (keys == null) { throw new ArgumentNullException(nameof(keys)); } keys.ToList().ForEach(item => _cache.Remove(item)); } } }