| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- namespace Admin.NET.Core.Service;
- /// <summary>
- /// 系统缓存服务
- /// </summary>
- [ApiDescriptionSettings(Name = "系统缓存", Order = 190)]
- public class SysCacheService : ISysCacheService, IDynamicApiController, ISingleton
- {
- private readonly IDistributedCache _cache;
- public SysCacheService(IDistributedCache cache)
- {
- _cache = cache;
- }
- /// <summary>
- /// 获取所有缓存列表
- /// </summary>
- /// <returns></returns>
- [HttpGet("/sysCache/keyList")]
- public async Task<List<string>> GetAllCacheKeys()
- {
- var res = await _cache.GetStringAsync(CacheConst.KeyAll);
- return string.IsNullOrWhiteSpace(res) ? null : JSON.Deserialize<List<string>>(res);
- }
- /// <summary>
- /// 增加对象缓存
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <param name="value"></param>
- /// <returns></returns>
- [HttpPost("/sysCache/addObject")]
- public async Task SetAsync(string cacheKey, object value)
- {
- await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JSON.Serialize(value)));
- await AddCacheKey(cacheKey);
- }
- /// <summary>
- /// 增加对象缓存,并设置过期时间
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <param name="value"></param>
- /// <param name="expire"></param>
- /// <returns></returns>
- [HttpPost("/sysCache/addObject/expire")]
- public async Task SetAsync(string cacheKey, object value, TimeSpan expire)
- {
- await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JSON.Serialize(value)), new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
- await AddCacheKey(cacheKey);
- }
- /// <summary>
- /// 增加字符串缓存
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <param name="value"></param>
- /// <returns></returns>
- [HttpPost("/sysCache/addString")]
- public async Task SetStringAsync(string cacheKey, string value)
- {
- await _cache.SetStringAsync(cacheKey, value);
- await AddCacheKey(cacheKey);
- }
- /// <summary>
- /// 增加字符串缓存,并设置过期时间
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <param name="value"></param>
- /// <param name="expire"></param>
- /// <returns></returns>
- [HttpPost("/sysCache/addString/expire")]
- public async Task SetStringAsync(string cacheKey, string value, TimeSpan expire)
- {
- await _cache.SetStringAsync(cacheKey, value, new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
- await AddCacheKey(cacheKey);
- }
- /// <summary>
- /// 获取缓存
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <returns></returns>
- [HttpGet("/sysCache/detail")]
- public async Task<string> GetStringAsync(string cacheKey)
- {
- return await _cache.GetStringAsync(cacheKey);
- }
- /// <summary>
- /// 删除缓存
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- [HttpGet("/sysCache/remove")]
- public async Task RemoveAsync(string key)
- {
- await _cache.RemoveAsync(key);
- await DelCacheKey(key);
- }
- /// <summary>
- /// 删除某特征关键字缓存
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- [NonAction]
- public async Task DelByPatternAsync(string key)
- {
- var allkeys = await GetAllCacheKeys();
- if (allkeys == null) return;
- var delAllkeys = allkeys.Where(u => u.Contains(key)).ToList();
- delAllkeys.ForEach(u =>
- {
- _cache.Remove(u);
- });
- // 更新所有缓存键
- allkeys = allkeys.Where(u => !u.Contains(key)).ToList();
- await _cache.SetStringAsync(CacheConst.KeyAll, JSON.Serialize(allkeys));
- }
- /// <summary>
- /// 获取缓存
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="cacheKey"></param>
- /// <returns></returns>
- [NonAction]
- public async Task<T> GetAsync<T>(string cacheKey)
- {
- var res = await _cache.GetAsync(cacheKey);
- return res == null ? default : JSON.Deserialize<T>(Encoding.UTF8.GetString(res));
- }
- /// <summary>
- /// 检查给定 key 是否存在
- /// </summary>
- /// <param name="cacheKey">键</param>
- /// <returns></returns>
- [NonAction]
- public async Task<bool> ExistsAsync(string cacheKey)
- {
- var res = await _cache.GetAsync(cacheKey);
- return res != null;
- }
- /// <summary>
- /// 增加缓存Key
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <returns></returns>
- [NonAction]
- public async Task AddCacheKey(string cacheKey)
- {
- var res = await _cache.GetStringAsync(CacheConst.KeyAll);
- var allkeys = string.IsNullOrWhiteSpace(res) ? new List<string>() : JSON.Deserialize<List<string>>(res);
- if (!allkeys.Any(m => m == cacheKey))
- {
- allkeys.Add(cacheKey);
- await _cache.SetStringAsync(CacheConst.KeyAll, JSON.Serialize(allkeys));
- }
- }
- /// <summary>
- /// 删除缓存
- /// </summary>
- /// <param name="cacheKey"></param>
- /// <returns></returns>
- [NonAction]
- public async Task DelCacheKey(string cacheKey)
- {
- var res = await _cache.GetStringAsync(CacheConst.KeyAll);
- var allkeys = string.IsNullOrWhiteSpace(res) ? new List<string>() : JSON.Deserialize<List<string>>(res);
- if (allkeys.Any(m => m == cacheKey))
- {
- allkeys.Remove(cacheKey);
- await _cache.SetStringAsync(CacheConst.KeyAll, JSON.Serialize(allkeys));
- }
- }
- /// <summary>
- /// 获取机构Id集合
- /// </summary>
- /// <param name="userId"></param>
- /// <returns></returns>
- [NonAction]
- public async Task<List<long>> GetOrgIdList(long userId)
- {
- var cacheKey = CacheConst.KeyOrgIdList + userId;
- var res = await _cache.GetStringAsync(cacheKey);
- return string.IsNullOrWhiteSpace(res) ? null : JSON.Deserialize<List<long>>(res);
- }
- /// <summary>
- /// 缓存机构Id集合
- /// </summary>
- /// <param name="userId"></param>
- /// <param name="orgIdList"></param>
- /// <returns></returns>
- [NonAction]
- public async Task SetOrgIdList(long userId, List<long> orgIdList)
- {
- var cacheKey = CacheConst.KeyOrgIdList + userId;
- await _cache.SetStringAsync(cacheKey, JSON.Serialize(orgIdList));
- await AddCacheKey(cacheKey);
- }
- ///// <summary>
- ///// 获取菜单缓存
- ///// </summary>
- ///// <param name="userId"></param>
- ///// <param name="appCode"></param>
- ///// <returns></returns>
- //[NonAction]
- //public async Task<List<AntDesignTreeNode>> GetMenu(long userId, string appCode)
- //{
- // var cacheKey = CacheConst.KeyMenu + $"{userId}-{appCode}";
- // var res = await _cache.GetStringAsync(cacheKey);
- // return string.IsNullOrWhiteSpace(res) ? null : JSON.Deserialize<List<AntDesignTreeNode>>(res);
- //}
- ///// <summary>
- ///// 缓存菜单
- ///// </summary>
- ///// <param name="userId"></param>
- ///// <param name="appCode"></param>
- ///// <param name="menus"></param>
- ///// <returns></returns>
- //[NonAction]
- //public async Task SetMenu(long userId, string appCode, List<AntDesignTreeNode> menus)
- //{
- // var cacheKey = CommonConst.CACHE_KEY_MENU + $"{userId}-{appCode}";
- // await _cache.SetStringAsync(cacheKey, JSON.Serialize(menus));
- // await AddCacheKey(cacheKey);
- //}
- /// <summary>
- /// 获取权限缓存(按钮)
- /// </summary>
- /// <param name="userId"></param>
- /// <returns></returns>
- [NonAction]
- public async Task<List<string>> GetPermission(long userId)
- {
- var cacheKey = CacheConst.KeyPermission + userId;
- var res = await _cache.GetStringAsync(cacheKey);
- return string.IsNullOrWhiteSpace(res) ? null : JSON.Deserialize<List<string>>(res);
- }
- /// <summary>
- /// 缓存权限
- /// </summary>
- /// <param name="userId"></param>
- /// <param name="permissions"></param>
- /// <returns></returns>
- [NonAction]
- public async Task SetPermission(long userId, List<string> permissions)
- {
- var cacheKey = CacheConst.KeyPermission + userId;
- await _cache.SetStringAsync(cacheKey, JSON.Serialize(permissions));
- await AddCacheKey(cacheKey);
- }
- /// <summary>
- /// 获取最大角色数据范围
- /// </summary>
- /// <param name="userId"></param>
- /// <returns></returns>
- [NonAction]
- public async Task<int?> GetMaxDataScopeType(long userId)
- {
- var cacheKey = CacheConst.KeyMaxDataScopeType + userId;
- var res = await _cache.GetStringAsync(cacheKey);
- return string.IsNullOrWhiteSpace(res) ? null : int.Parse(res);
- }
- /// <summary>
- /// 缓存最大角色数据范围
- /// </summary>
- /// <param name="userId"></param>
- /// <param name="dataScopeType"></param>
- /// <returns></returns>
- [NonAction]
- public async Task SetMaxDataScopeType(long userId, int dataScopeType)
- {
- var cacheKey = CacheConst.KeyMaxDataScopeType + userId;
- await _cache.SetStringAsync(cacheKey, dataScopeType.ToString());
- await AddCacheKey(cacheKey);
- }
- }
|