using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace TEAMModelOS.SDK.Module.Cache
{
public class CSRedisCacheService :ICacheService//,IDisposable
{
protected IDistributedCache _cache;
public CSRedisCacheService(IDistributedCache cache )
{
_cache = cache;
}
///
/// 验证缓存项是否存在
///
/// 缓存Key
///
public bool Exists(string key)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
return RedisHelper.Instance.Exists(key);
// return _cache.KeyExists(GetKeyForRedis(key));
}///
/// 添加缓存
///
/// 缓存Key
/// 缓存Value
///
public bool Add(string key, object value)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
_cache.Set(key, Encoding.UTF8.GetBytes(JsonSerializer.Serialize(value)));
return Exists(key);
}
///
/// 添加缓存
///
/// 缓存Key
/// 缓存Value
/// 滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间,Redis中无效)
/// 绝对过期时长
///
public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
_cache.Set(key, Encoding.UTF8.GetBytes(JsonSerializer.Serialize(value)), new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow=expiressAbsoulte,SlidingExpiration=expiresSliding});
return Exists(key);
}
///
/// 添加缓存
///
/// 缓存Key
/// 缓存Value
/// 缓存时长
/// 是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间,Redis中无效)
///
public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
_cache.Set(key, Encoding.UTF8.GetBytes(JsonSerializer.Serialize(value)), new DistributedCacheEntryOptions() { SlidingExpiration = expiresIn });
return Exists(key);
// return _cache.StringSet(GetKeyForRedis(key), Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)), expiresIn);
}///
/// 删除缓存
///
/// 缓存Key
///
public bool Remove(string key)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
_cache.Remove(key);
return !Exists(key);
}
///
/// 批量删除缓存
///
/// 缓存Key集合
///
public void RemoveAll(IEnumerable keys)
{
if (keys == null)
{
throw new ArgumentNullException(nameof(keys));
}
keys.ToList().ForEach(item => Remove(item));
}
///
/// 获取缓存
///
/// 缓存Key
///
public T Get(string key) where T : class
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
var value = _cache.GetString(key);
if ( string.IsNullOrEmpty(value))
{
return default(T);
}
return JsonSerializer.Deserialize(value);
}
///
/// 获取缓存
///
/// 缓存Key
///
public object Get(string key)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
var value = _cache.GetString(key);
if (string.IsNullOrEmpty(value))
{
return null;
}
return JsonSerializer.Deserialize