#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; } } }