#region Copyright (C) 2016 Kevin (OSS开源系列) 公众号:OSSCore
/***************************************************************************
* 文件功能描述:全局插件 - Redis 缓存辅助类
*
* 创建人: Kevin
* 创建人Email:1985088337@qq.com
*
*
*****************************************************************************/
#endregion
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.StackExchangeRedis;
using Newtonsoft.Json;
using OSS.Tools.Cache;
using System.Text;
namespace OSS.Tools.RedisCache
{
///
/// Redis 缓存工具实现
///
public class ToolStackRedisCache : IToolCache
{
private readonly Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache _cache;
///
/// 构造函数
///
///
public ToolStackRedisCache(RedisCacheOptions optionsAccessor)
{
_cache = new Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache(optionsAccessor);
}
///
/// 设置缓存
///
///
///
///
///
///
public async Task SetAsync(string key, T obj, CacheTimeOptions cacheOpt)
{
var text = JsonConvert.SerializeObject(obj);
var bytes = Encoding.UTF8.GetBytes(text);
await _cache.SetAsync(key, bytes, new DistributedCacheEntryOptions()
{
AbsoluteExpirationRelativeToNow = cacheOpt.absolute_expiration_relative_to_now,
SlidingExpiration = cacheOpt.sliding_expiration,
AbsoluteExpiration = cacheOpt.absolute_expiration
});
return true;
}
///
/// 获取缓存实现
///
///
///
///
public async Task GetAsync(string key)
{
var bytes = await _cache.GetAsync(key);
var text = Encoding.UTF8.GetString(bytes);
return JsonConvert.DeserializeObject(text);
}
///
/// 移除缓存实现
///
///
///
public async Task RemoveAsync(params string[] keys)
{
foreach (var key in keys)
{
await _cache.RemoveAsync(key);
}
return true;
}
}
}