using Microsoft.Extensions.Caching.Memory;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace WIDESEA_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<T>(string key) where T : class
|
{
|
if (key == null)
|
{
|
throw new ArgumentNullException(nameof(key));
|
}
|
return _cache.Get(key) as T;
|
}
|
|
public string Get(string key)
|
{
|
return _cache.Get(key)?.ToString();
|
}
|
|
public bool Remove(string key)
|
{
|
if (key == null)
|
{
|
throw new ArgumentNullException(nameof(key));
|
}
|
_cache.Remove(key);
|
|
return !Exists(key);
|
}
|
|
public void Remove(IEnumerable<string> keys)
|
{
|
if (keys == null)
|
{
|
throw new ArgumentNullException(nameof(keys));
|
}
|
|
keys.ToList().ForEach(item => _cache.Remove(item));
|
}
|
}
|
}
|