소스 검색

集成NewLife.Redis缓存

zuohuaijun 3 년 전
부모
커밋
ed251c8f97
24개의 변경된 파일188개의 추가작업 그리고 427개의 파일을 삭제
  1. 1 2
      Admin.NET/Admin.NET.Application/Service/TestJobTimer.cs
  2. 1 1
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 24 74
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  4. 2 3
      Admin.NET/Admin.NET.Core/AdminNETConfig.json
  5. 14 12
      Admin.NET/Admin.NET.Core/Cache/CacheSetup.cs
  6. 7 22
      Admin.NET/Admin.NET.Core/Cache/SqlSugarCache.cs
  7. 2 2
      Admin.NET/Admin.NET.Core/Enum/CacheTypeEnum.cs
  8. 0 1
      Admin.NET/Admin.NET.Core/GlobalUsings.cs
  9. 2 2
      Admin.NET/Admin.NET.Core/Hub/ChatHub.cs
  10. 1 6
      Admin.NET/Admin.NET.Core/Option/CacheOptions.cs
  11. 0 40
      Admin.NET/Admin.NET.Core/Service/Cache/ISysCacheService.cs
  12. 72 194
      Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs
  13. 6 6
      Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs
  14. 8 14
      Admin.NET/Admin.NET.Core/Service/Const/SysConstService.cs
  15. 9 9
      Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs
  16. 5 5
      Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs
  17. 6 6
      Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs
  18. 4 4
      Admin.NET/Admin.NET.Core/Service/Role/SysRoleMenuService.cs
  19. 3 3
      Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs
  20. 10 10
      Admin.NET/Admin.NET.Core/Service/Timer/SysTimerService.cs
  21. 3 3
      Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs
  22. 5 4
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs
  23. 1 1
      Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj
  24. 2 3
      Admin.NET/Admin.NET.Web.Core/Startup.cs

+ 1 - 2
Admin.NET/Admin.NET.Application/Service/TestJobTimer.cs

@@ -1,5 +1,4 @@
-using Furion.Logging;
-using Furion.TaskScheduler;
+using Furion.TaskScheduler;
 
 namespace Admin.NET.Application.Service;
 

+ 1 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -24,7 +24,6 @@
 
   <ItemGroup>
     <PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
-    <PackageReference Include="Caching.CSRedis" Version="3.8.669" />
     <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.4.5" />
     <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.4.5" />
     <PackageReference Include="Furion.Pure" Version="4.4.5" />
@@ -33,6 +32,7 @@
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.9" />
     <PackageReference Include="NEST" Version="7.17.4" />
     <PackageReference Include="NETCore.MailKit" Version="2.1.0" />
+    <PackageReference Include="NewLife.Redis" Version="5.0.2022.901" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.8" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.17.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.13.1" />

+ 24 - 74
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -21,7 +21,7 @@
         </member>
         <member name="M:Admin.NET.Core.CacheSetup.AddCache(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
             <summary>
-            缓存注册(Redis缓存
+            缓存注册(新生命Redis组件
             </summary>
             <param name="services"></param>
         </member>
@@ -1731,12 +1731,12 @@
             缓存类型枚举
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.CacheTypeEnum.MemoryCache">
+        <member name="F:Admin.NET.Core.CacheTypeEnum.Memory">
             <summary>
             内存缓存
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.CacheTypeEnum.RedisCache">
+        <member name="F:Admin.NET.Core.CacheTypeEnum.Redis">
             <summary>
             Redis缓存
             </summary>
@@ -3170,12 +3170,7 @@
         </member>
         <member name="P:Admin.NET.Core.CacheOptions.RedisConnectionString">
             <summary>
-            Redis连接
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.CacheOptions.InstanceName">
-            <summary>
-            键值前缀
+            Redis连接字符串
             </summary>
         </member>
         <member name="T:Admin.NET.Core.CodeGenOptions">
@@ -3686,94 +3681,56 @@
             系统缓存服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.GetAllCacheKeys">
-            <summary>
-            获取所有缓存列表
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.SetAsync(System.String,System.Object)">
-            <summary>
-            增加对象缓存
-            </summary>
-            <param name="cacheKey"></param>
-            <param name="value"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.SetAsync(System.String,System.Object,System.TimeSpan)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.GetCacheKeys">
             <summary>
-            增加对象缓存,并设置过期时间
+            获取所有缓存键名
             </summary>
-            <param name="cacheKey"></param>
-            <param name="value"></param>
-            <param name="expire"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.SetStringAsync(System.String,System.String)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.Set(System.String,System.Object)">
             <summary>
-            增加字符串缓存
+            增加缓存
             </summary>
-            <param name="cacheKey"></param>
+            <param name="key"></param>
             <param name="value"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.SetStringAsync(System.String,System.String,System.TimeSpan)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.Set(System.String,System.Object,System.TimeSpan)">
             <summary>
-            增加字符串缓存,并设置过期时间
+            增加缓存并设置过期时间
             </summary>
-            <param name="cacheKey"></param>
+            <param name="key"></param>
             <param name="value"></param>
             <param name="expire"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.GetStringAsync(System.String)">
-            <summary>
-            获取字符串缓存
-            </summary>
-            <param name="cacheKey"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.GetAsync``1(System.String)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.Get``1(System.String)">
             <summary>
-            获取对象缓存
+            获取缓存
             </summary>
             <typeparam name="T"></typeparam>
-            <param name="cacheKey"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.RemoveAsync(System.String)">
-            <summary>
-            删除缓存
-            </summary>
             <param name="key"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.DelByPatternAsync(System.String)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.Remove(System.String)">
             <summary>
-            删除某特征关键字缓存
+            删除缓存
             </summary>
             <param name="key"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.ExistsAsync(System.String)">
-            <summary>
-            检查给定 key 是否存在
-            </summary>
-            <param name="cacheKey">键</param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.AddCacheKey(System.String)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.ExistKey(System.String)">
             <summary>
-            增加缓存Key
+            检查缓存是否存在
             </summary>
-            <param name="cacheKey"></param>
+            <param name="key">键</param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.DelCacheKey(System.String)">
+        <member name="M:Admin.NET.Core.Service.SysCacheService.RemoveByPrefixKey(System.String)">
             <summary>
-            删除缓存
+            根据键名前缀删除缓存
             </summary>
-            <param name="cacheKey"></param>
+            <param name="prefixKey">键名前缀</param>
             <returns></returns>
         </member>
         <member name="M:Admin.NET.Core.Service.SysCacheService.GetOrgIdList(System.Int64)">
@@ -3793,14 +3750,14 @@
         </member>
         <member name="M:Admin.NET.Core.Service.SysCacheService.GetPermission(System.Int64)">
             <summary>
-            获取权限缓存(按钮)
+            获取权限集合(按钮)
             </summary>
             <param name="userId"></param>
             <returns></returns>
         </member>
         <member name="M:Admin.NET.Core.Service.SysCacheService.SetPermission(System.Int64,System.Collections.Generic.List{System.String})">
             <summary>
-            缓存权限
+            缓存权限集合(按钮)
             </summary>
             <param name="userId"></param>
             <param name="permissions"></param>
@@ -3821,13 +3778,6 @@
             <param name="dataScopeType"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysCacheService.DelByParentKeyAsync(System.String)">
-            <summary>
-             根据父键清空缓存
-            </summary>
-            <param name="key"></param>
-            <returns></returns>
-        </member>
         <member name="P:Admin.NET.Core.Service.CustomViewEngine.ConfigId">
             <summary>
             库定位器

+ 2 - 3
Admin.NET/Admin.NET.Core/AdminNETConfig.json

@@ -74,9 +74,8 @@
         "SignalRSupport": true // 启用 SignalR 跨域支持
     },
     "Cache": {
-        "CacheType": "MemoryCache", // RedisCache
-        "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=2",
-        "InstanceName": "zuo_"
+        "CacheType": "Memory", // Memory、Redis
+        "RedisConnectionString": "127.0.0.1:6379;password=;db=2"
     },
     "SnowId": {
         "WorkerId": 5 // 取值范围0~63,默认1

+ 14 - 12
Admin.NET/Admin.NET.Core/Cache/CacheSetup.cs

@@ -1,26 +1,28 @@
-using CSRedis;
-using Microsoft.Extensions.Caching.Redis;
+using NewLife.Caching;
 
 namespace Admin.NET.Core;
 
 public static class CacheSetup
 {
     /// <summary>
-    /// 缓存注册(Redis缓存
+    /// 缓存注册(新生命Redis组件
     /// </summary>
     /// <param name="services"></param>
     public static void AddCache(this IServiceCollection services)
     {
-        var cacheOptions = App.GetOptions<CacheOptions>();
-        if (cacheOptions.CacheType != CacheTypeEnum.RedisCache.ToString())
-            return;
-
-        services.AddSingleton<IDistributedCache>(provider =>
+        services.AddSingleton<ICache>(options =>
         {
-            var redisStr = $"{cacheOptions.RedisConnectionString},prefix={cacheOptions.InstanceName}";
-            var redis = new CSRedisClient(redisStr);
-            RedisHelper.Initialization(redis);
-            return new CSRedisCache(redis);
+            var cacheOptions = App.GetOptions<CacheOptions>();
+            if (cacheOptions.CacheType == CacheTypeEnum.Redis.ToString())
+            {
+                var redis = new Redis();
+                redis.Init(cacheOptions.RedisConnectionString);
+                return redis;
+            }
+            else
+            {
+                return Cache.Default;
+            }
         });
     }
 }

+ 7 - 22
Admin.NET/Admin.NET.Core/Cache/SqlSugarCache.cs

@@ -1,14 +1,13 @@
-using Microsoft.Extensions.Caching.Memory;
+using NewLife.Caching;
 
 namespace Admin.NET.Core;
 
 /// <summary>
 /// SqlSugar二级缓存
 /// </summary>
-public class SqlSugarCache : ICacheService, ISingleton, IDisposable
+public class SqlSugarCache : ICacheService, ISingleton
 {
-    private static readonly Lazy<IMemoryCache> lazyCache = new(() => new MemoryCache(new MemoryCacheOptions()));
-    public static IMemoryCache _cache => lazyCache.Value;
+    private static readonly ICache _cache = App.GetRequiredService<ICache>();
 
     public void Add<V>(string key, V value)
     {
@@ -17,12 +16,12 @@ public class SqlSugarCache : ICacheService, ISingleton, IDisposable
 
     public void Add<V>(string key, V value, int cacheDurationInSeconds)
     {
-        _cache.Set(key, value, TimeSpan.FromSeconds(cacheDurationInSeconds));
+        _cache.Set(key, value, cacheDurationInSeconds);
     }
 
     public bool ContainsKey<V>(string key)
     {
-        return _cache.TryGetValue(key, out _);
+        return _cache.ContainsKey(key);
     }
 
     public V Get<V>(string key)
@@ -32,16 +31,7 @@ public class SqlSugarCache : ICacheService, ISingleton, IDisposable
 
     public IEnumerable<string> GetAllKey<V>()
     {
-        const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
-        var entries = _cache.GetType().GetField("_entries", flags).GetValue(_cache);
-        var cacheItems = entries as IDictionary;
-        var keys = new List<string>();
-        if (cacheItems == null) return keys;
-        foreach (DictionaryEntry cacheItem in cacheItems)
-        {
-            keys.Add(cacheItem.Key.ToString());
-        }
-        return keys;
+        return _cache.Keys;
     }
 
     public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
@@ -49,7 +39,7 @@ public class SqlSugarCache : ICacheService, ISingleton, IDisposable
         if (!_cache.TryGetValue<V>(cacheKey, out V value))
         {
             value = create();
-            _cache.Set(cacheKey, value, TimeSpan.FromSeconds(cacheDurationInSeconds));
+            _cache.Set(cacheKey, value, cacheDurationInSeconds);
         }
         return value;
     }
@@ -58,9 +48,4 @@ public class SqlSugarCache : ICacheService, ISingleton, IDisposable
     {
         _cache.Remove(key);
     }
-
-    public void Dispose()
-    {
-        _cache.Dispose();
-    }
 }

+ 2 - 2
Admin.NET/Admin.NET.Core/Enum/CacheTypeEnum.cs

@@ -9,11 +9,11 @@ public enum CacheTypeEnum
     /// 内存缓存
     /// </summary>
     [Description("内存缓存")]
-    MemoryCache,
+    Memory,
 
     /// <summary>
     /// Redis缓存
     /// </summary>
     [Description("Redis缓存")]
-    RedisCache
+    Redis
 }

+ 0 - 1
Admin.NET/Admin.NET.Core/GlobalUsings.cs

@@ -22,7 +22,6 @@ global using Microsoft.AspNetCore.Authorization;
 global using Microsoft.AspNetCore.Http;
 global using Microsoft.AspNetCore.Mvc;
 global using Microsoft.AspNetCore.Mvc.Filters;
-global using Microsoft.Extensions.Caching.Distributed;
 global using Microsoft.Extensions.Configuration;
 global using Microsoft.Extensions.DependencyInjection;
 global using Microsoft.Extensions.Options;

+ 2 - 2
Admin.NET/Admin.NET.Core/Hub/ChatHub.cs

@@ -9,12 +9,12 @@ namespace Admin.NET.Core;
 [MapHub("/hubs/chathub")]
 public class ChatHub : Hub<IChatClient>
 {
-    private readonly ISysCacheService _sysCache;
+    private readonly SysCacheService _sysCache;
     private readonly ISysMessageService _sysMessageService;
     private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;
     private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
 
-    public ChatHub(ISysCacheService sysCache,
+    public ChatHub(SysCacheService sysCache,
         ISysMessageService sysMessageService,
         SqlSugarRepository<SysOnlineUser> sysOnlineUerRep,
         IHubContext<ChatHub, IChatClient> chatHubContext)

+ 1 - 6
Admin.NET/Admin.NET.Core/Option/CacheOptions.cs

@@ -11,12 +11,7 @@ public sealed class CacheOptions : IConfigurableOptions
     public string CacheType { get; set; }
 
     /// <summary>
-    /// Redis连接
+    /// Redis连接字符串
     /// </summary>
     public string RedisConnectionString { get; set; }
-
-    /// <summary>
-    /// 键值前缀
-    /// </summary>
-    public string InstanceName { get; set; }
 }

+ 0 - 40
Admin.NET/Admin.NET.Core/Service/Cache/ISysCacheService.cs

@@ -1,40 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-public interface ISysCacheService
-{
-    Task DelByParentKeyAsync(string key);
-
-    Task DelByPatternAsync(string key);
-
-    Task DelCacheKey(string cacheKey);
-
-    Task<bool> ExistsAsync(string cacheKey);
-
-    Task<List<string>> GetAllCacheKeys();
-
-    Task<T> GetAsync<T>(string cacheKey);
-
-    Task<int?> GetMaxDataScopeType(long userId);
-
-    Task<List<long>> GetOrgIdList(long userId);
-
-    Task<List<string>> GetPermission(long userId);
-
-    Task<string> GetStringAsync(string cacheKey);
-
-    Task RemoveAsync(string key);
-
-    Task SetAsync(string cacheKey, object value);
-
-    Task SetAsync(string cacheKey, object value, TimeSpan expire);
-
-    Task SetMaxDataScopeType(long userId, int dataScopeType);
-
-    Task SetOrgIdList(long userId, List<long> orgIdList);
-
-    Task SetPermission(long userId, List<string> permissions);
-
-    Task SetStringAsync(string cacheKey, string value);
-
-    Task SetStringAsync(string cacheKey, string value, TimeSpan expire);
-}

+ 72 - 194
Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs

@@ -1,217 +1,174 @@
-namespace Admin.NET.Core.Service;
+using NewLife.Caching;
+
+namespace Admin.NET.Core.Service;
 
 /// <summary>
 /// 系统缓存服务
 /// </summary>
 [ApiDescriptionSettings(Order = 190)]
-public class SysCacheService : ISysCacheService, IDynamicApiController, ISingleton
+public class SysCacheService : IDynamicApiController, ISingleton
 {
-    private readonly IDistributedCache _cache;
+    private readonly ICache _cache;
 
-    public SysCacheService(IDistributedCache cache)
+    public SysCacheService(ICache cache)
     {
         _cache = cache;
     }
 
     /// <summary>
-    /// 获取所有缓存列表
+    /// 获取所有缓存键名
     /// </summary>
     /// <returns></returns>
     [HttpGet("/sysCache/keyList")]
-    public async Task<List<string>> GetAllCacheKeys()
+    public List<string> GetCacheKeys()
     {
-        var res = await _cache.GetStringAsync(CacheConst.KeyAll);
-        return string.IsNullOrWhiteSpace(res) ? null : JSON.Deserialize<List<string>>(res);
+        return _cache.Keys.ToList();
     }
 
     /// <summary>
-    /// 增加对象缓存
+    /// 增加缓存
     /// </summary>
-    /// <param name="cacheKey"></param>
+    /// <param name="key"></param>
     /// <param name="value"></param>
     /// <returns></returns>
-    [HttpPost("/sysCache/addObject")]
-    public async Task SetAsync(string cacheKey, object value)
+    [HttpPost("/sysCache/add")]
+    public void Set(string key, object value)
     {
-        await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JSON.Serialize(value)));
-
-        await AddCacheKey(cacheKey);
+        _cache.Set(key, value);
     }
 
     /// <summary>
-    /// 增加对象缓存,并设置过期时间
+    /// 增加缓存并设置过期时间
     /// </summary>
-    /// <param name="cacheKey"></param>
+    /// <param name="key"></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)
+    [HttpPost("/sysCache/add/expire")]
+    public void Set(string key, object value, TimeSpan expire)
     {
-        await _cache.SetStringAsync(cacheKey, value);
-
-        await AddCacheKey(cacheKey);
+        _cache.Set(key, value, expire);
     }
 
     /// <summary>
-    /// 增加字符串缓存,并设置过期时间
+    /// 获取缓存
     /// </summary>
-    /// <param name="cacheKey"></param>
-    /// <param name="value"></param>
-    /// <param name="expire"></param>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="key"></param>
     /// <returns></returns>
-    [HttpPost("/sysCache/addString/expire")]
-    public async Task SetStringAsync(string cacheKey, string value, TimeSpan expire)
+    [NonAction]
+    public T Get<T>(string key)
     {
-        await _cache.SetStringAsync(cacheKey, value, new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
-
-        await AddCacheKey(cacheKey);
+        return _cache.Get<T>(key);
     }
 
     /// <summary>
-    /// 获取字符串缓存
+    /// 删除缓存
     /// </summary>
-    /// <param name="cacheKey"></param>
+    /// <param name="key"></param>
     /// <returns></returns>
-    [HttpGet("/sysCache/detail")]
-    public async Task<string> GetStringAsync(string cacheKey)
+    [HttpGet("/sysCache/remove")]
+    public void Remove(string key)
     {
-        return await _cache.GetStringAsync(cacheKey);
+        _cache.Remove(key);
     }
 
     /// <summary>
-    /// 获取对象缓存
+    /// 检查缓存是否存在
     /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="cacheKey"></param>
+    /// <param name="key">键</param>
     /// <returns></returns>
     [NonAction]
-    public async Task<T> GetAsync<T>(string cacheKey)
+    public bool ExistKey(string key)
     {
-        var res = await _cache.GetAsync(cacheKey);
-        return res == null ? default : JSON.Deserialize<T>(Encoding.UTF8.GetString(res));
+        return _cache.ContainsKey(key);
     }
 
     /// <summary>
-    /// 删除缓存
+    /// 根据键名前缀删除缓存
     /// </summary>
-    /// <param name="key"></param>
+    /// <param name="prefixKey">键名前缀</param>
     /// <returns></returns>
-    [HttpGet("/sysCache/remove")]
-    public async Task RemoveAsync(string key)
+    [HttpGet("/sysCache/delByParentKey")]
+    public int RemoveByPrefixKey(string prefixKey)
     {
-        await _cache.RemoveAsync(key);
-
-        await DelCacheKey(key);
+        var delKeys = _cache.Keys.Where(u => u.StartsWith(prefixKey)).ToArray();
+        return _cache.Remove(delKeys);
     }
 
     /// <summary>
-    /// 删除某特征关键字缓存
+    /// 获取机构Id集合
     /// </summary>
-    /// <param name="key"></param>
+    /// <param name="userId"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task DelByPatternAsync(string key)
+    public List<long> GetOrgIdList(long userId)
     {
-        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));
+        var key = CacheConst.KeyOrgIdList + userId;
+        return _cache.Get<List<long>>(key);
     }
 
     /// <summary>
-    /// 检查给定 key 是否存在
+    /// 缓存机构Id集合
     /// </summary>
-    /// <param name="cacheKey">键</param>
+    /// <param name="userId"></param>
+    /// <param name="orgIdList"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task<bool> ExistsAsync(string cacheKey)
+    public bool SetOrgIdList(long userId, List<long> orgIdList)
     {
-        var res = await _cache.GetAsync(cacheKey);
-        return res != null;
+        var key = CacheConst.KeyOrgIdList + userId;
+        return _cache.Set(key, orgIdList);
     }
 
     /// <summary>
-    /// 增加缓存Key
+    /// 获取权限集合(按钮)
     /// </summary>
-    /// <param name="cacheKey"></param>
+    /// <param name="userId"></param>
     /// <returns></returns>
-    private async Task AddCacheKey(string cacheKey)
+    [NonAction]
+    public List<string> GetPermission(long userId)
     {
-        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));
-        }
+        var key = CacheConst.KeyPermission + userId;
+        return _cache.Get<List<string>>(key);
     }
 
     /// <summary>
-    /// 删除缓存
+    /// 缓存权限集合(按钮)
     /// </summary>
-    /// <param name="cacheKey"></param>
+    /// <param name="userId"></param>
+    /// <param name="permissions"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task DelCacheKey(string cacheKey)
+    public bool SetPermission(long userId, List<string> permissions)
     {
-        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));
-        }
+        var key = CacheConst.KeyPermission + userId;
+        return _cache.Set(key, permissions);
     }
 
     /// <summary>
-    /// 获取机构Id集合
+    /// 获取最大角色数据范围
     /// </summary>
     /// <param name="userId"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task<List<long>> GetOrgIdList(long userId)
+    public int? GetMaxDataScopeType(long userId)
     {
-        var cacheKey = CacheConst.KeyOrgIdList + userId;
-        var res = await _cache.GetStringAsync(cacheKey);
-        return string.IsNullOrWhiteSpace(res) ? null : JSON.Deserialize<List<long>>(res);
+        var key = CacheConst.KeyMaxDataScopeType + userId;
+        return _cache.Get<int>(key);
     }
 
     /// <summary>
-    /// 缓存机构Id集合
+    /// 缓存最大角色数据范围
     /// </summary>
     /// <param name="userId"></param>
-    /// <param name="orgIdList"></param>
+    /// <param name="dataScopeType"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task SetOrgIdList(long userId, List<long> orgIdList)
+    public bool SetMaxDataScopeType(long userId, int dataScopeType)
     {
-        var cacheKey = CacheConst.KeyOrgIdList + userId;
-        await _cache.SetStringAsync(cacheKey, JSON.Serialize(orgIdList));
-
-        await AddCacheKey(cacheKey);
+        var key = CacheConst.KeyMaxDataScopeType + userId;
+        return _cache.Set(key, dataScopeType);
     }
 
     ///// <summary>
@@ -240,84 +197,5 @@ public class SysCacheService : ISysCacheService, IDynamicApiController, ISinglet
     //{
     //    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);
-    }
-
-    /// <summary>
-    ///  根据父键清空缓存
-    /// </summary>
-    /// <param name="key"></param>
-    /// <returns></returns>
-    [HttpGet("/sysCache/delByParentKey")]
-    public async Task DelByParentKeyAsync(string key)
-    {
-        var allkeys = await GetAllCacheKeys();
-        if (allkeys == null) return;
-
-        var delAllkeys = allkeys.Where(u => u.StartsWith(key)).ToList();
-        delAllkeys.ForEach(u =>
-        {
-            _cache.Remove(u);
-        });
-        // 更新所有缓存键
-        allkeys = allkeys.Where(u => !u.StartsWith(key)).ToList();
-        await _cache.SetStringAsync(CacheConst.KeyAll, JSON.Serialize(allkeys));
-    }
 }

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -7,10 +7,10 @@
 public class SysConfigService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysConfig> _sysConfigRep;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
 
     public SysConfigService(SqlSugarRepository<SysConfig> sysConfigRep,
-        ISysCacheService sysCacheService)
+        SysCacheService sysCacheService)
     {
         _sysConfigRep = sysConfigRep;
         _sysCacheService = sysCacheService;
@@ -70,7 +70,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         var config = input.Adapt<SysConfig>();
         await _sysConfigRep.AsUpdateable(config).IgnoreColumns(true).ExecuteCommandAsync();
 
-        await _sysCacheService.DelCacheKey(config.Code);
+        _sysCacheService.Remove(config.Code);
     }
 
     /// <summary>
@@ -98,7 +98,7 @@ public class SysConfigService : IDynamicApiController, ITransient
 
         await _sysConfigRep.DeleteAsync(config);
 
-        await _sysCacheService.DelCacheKey(config.Code);
+        _sysCacheService.Remove(config.Code);
     }
 
     /// <summary>
@@ -109,12 +109,12 @@ public class SysConfigService : IDynamicApiController, ITransient
     [NonAction]
     public async Task<T> GetConfigValue<T>(string code)
     {
-        var value = await _sysCacheService.GetStringAsync(code);
+        var value = _sysCacheService.Get<string>(code);
         if (string.IsNullOrEmpty(value))
         {
             var config = await _sysConfigRep.GetFirstAsync(u => u.Code == code);
             value = config != null ? config.Value : default;
-            await _sysCacheService.SetStringAsync(code, value);
+            _sysCacheService.Set(code, value);
         }
         return (T)Convert.ChangeType(value, typeof(T));
     }

+ 8 - 14
Admin.NET/Admin.NET.Core/Service/Const/SysConstService.cs

@@ -7,9 +7,9 @@
 [AllowAnonymous]
 public class SysConstService : IDynamicApiController, ITransient
 {
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
 
-    public SysConstService(ISysCacheService sysCacheService)
+    public SysConstService(SysCacheService sysCacheService)
     {
         _sysCacheService = sysCacheService;
     }
@@ -22,18 +22,15 @@ public class SysConstService : IDynamicApiController, ITransient
     public async Task<List<SelectorDto>> GetAllConstSelector()
     {
         var key = $"{CacheConst.KeyConstSelector}AllSelector";
-        var json = await _sysCacheService.GetStringAsync(key);
-        if (!string.IsNullOrWhiteSpace(json))
-        {
-            return json.ToObject<List<SelectorDto>>();
-        }
+        var json = _sysCacheService.Get<List<SelectorDto>>(key);
+
         var typeList = await GetAllTypesAsync();
         var selectData = typeList.Select(x => new SelectorDto
         {
             Name = x.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments.ToList().FirstOrDefault().Value?.ToString() ?? x.Name,
             Code = x.Name
         }).ToList();
-        await _sysCacheService.SetStringAsync(key, selectData.ToJson());
+        _sysCacheService.Set(key, selectData);
         return selectData;
     }
 
@@ -46,11 +43,8 @@ public class SysConstService : IDynamicApiController, ITransient
     public async Task<List<SelectorDto>> GetConstSelector(string typeName)
     {
         var key = $"{CacheConst.KeyConstSelector}{typeName.ToUpper()}";
-        var json = await _sysCacheService.GetStringAsync(key);
-        if (!string.IsNullOrWhiteSpace(json))
-        {
-            return json.ToObject<List<SelectorDto>>();
-        }
+        var json = _sysCacheService.Get<List<SelectorDto>>(key);
+
         var typeList = await GetAllTypesAsync();
         var type = typeList.FirstOrDefault(x => x.Name == typeName);
 
@@ -62,7 +56,7 @@ public class SysConstService : IDynamicApiController, ITransient
                 Name = x.Name,
                 Code = isEnum ? (int)x.GetValue(BindingFlags.Instance) : x.GetValue(BindingFlags.Instance)
             }).ToList();
-        await _sysCacheService.SetStringAsync(key, selectData.ToJson());
+        _sysCacheService.Set(key, selectData);
         return selectData;
     }
 

+ 9 - 9
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -10,13 +10,13 @@ public class SysMenuService : IDynamicApiController, ITransient
     private readonly IUserManager _userManager;
     private readonly SysRoleMenuService _sysRoleMenuService;
     private readonly SysUserRoleService _sysUserRoleService;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
 
     public SysMenuService(SqlSugarRepository<SysMenu> sysMenuRep,
         IUserManager userManager,
         SysRoleMenuService sysRoleMenuService,
         SysUserRoleService sysUserRoleService,
-        ISysCacheService sysCacheService)
+        SysCacheService sysCacheService)
     {
         _sysMenuRep = sysMenuRep;
         _userManager = userManager;
@@ -176,7 +176,7 @@ public class SysMenuService : IDynamicApiController, ITransient
     public async Task<List<string>> GetPermCodeList()
     {
         var userId = _userManager.UserId;
-        var permissions = await _sysCacheService.GetPermission(userId); // 先从缓存里面读取
+        var permissions = _sysCacheService.GetPermission(userId); // 先从缓存里面读取
         if (permissions == null || permissions.Count == 0)
         {
             if (_userManager.SuperAdmin)
@@ -193,7 +193,7 @@ public class SysMenuService : IDynamicApiController, ITransient
                     .Where(u => menuIdList.Contains(u.Id))
                     .Select(u => u.Permission).ToListAsync();
             }
-            await _sysCacheService.SetPermission(userId, permissions); // 缓存结果
+            _sysCacheService.SetPermission(userId, permissions); // 缓存结果
         }
         return permissions;
     }
@@ -205,13 +205,13 @@ public class SysMenuService : IDynamicApiController, ITransient
     [NonAction]
     public async Task<List<string>> GetAllPermCodeList()
     {
-        var permissions = await _sysCacheService.GetPermission(0); // 先从缓存里面读取
+        var permissions = _sysCacheService.GetPermission(0); // 先从缓存里面读取
         if (permissions == null || permissions.Count == 0)
         {
             permissions = await _sysMenuRep.AsQueryable()
                     .Where(u => u.Type == MenuTypeEnum.Btn)
                     .Select(u => u.Permission).ToListAsync();
-            await _sysCacheService.SetPermission(0, permissions); // 缓存结果
+            _sysCacheService.SetPermission(0, permissions); // 缓存结果
         }
         return permissions;
     }
@@ -219,10 +219,10 @@ public class SysMenuService : IDynamicApiController, ITransient
     /// <summary>
     /// 清除菜单和按钮缓存
     /// </summary>
-    private async void DeleteMenuCache()
+    private void DeleteMenuCache()
     {
-        await _sysCacheService.DelByPatternAsync(CacheConst.KeyMenu);
-        await _sysCacheService.DelByPatternAsync(CacheConst.KeyPermission);
+        _sysCacheService.RemoveByPrefixKey(CacheConst.KeyMenu);
+        _sysCacheService.RemoveByPrefixKey(CacheConst.KeyPermission);
     }
 
     /// <summary>

+ 5 - 5
Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs

@@ -9,13 +9,13 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 101)]
 public class SysMessageService : ISysMessageService, IDynamicApiController, ITransient
 {
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
     private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
 
     private readonly EmailOptions _emailOptions;
     private readonly IEmailService _emailService;
 
-    public SysMessageService(ISysCacheService sysCacheService,
+    public SysMessageService(SysCacheService sysCacheService,
         IHubContext<ChatHub, IChatClient> chatHubContext,
         IOptions<EmailOptions> emailOptions,
         IEmailService emailService)
@@ -45,7 +45,7 @@ public class SysMessageService : ISysMessageService, IDynamicApiController, ITra
     [HttpPost("sysMessage/otherUser")]
     public async Task SendMessageToOtherUser(MessageInput input)
     {
-        var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
+        var onlineuserlist = _sysCacheService.Get<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
 
         var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
         if (user != null)
@@ -62,7 +62,7 @@ public class SysMessageService : ISysMessageService, IDynamicApiController, ITra
     [HttpPost("sysMessage/user")]
     public async Task SendMessageToUser(MessageInput input)
     {
-        var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
+        var onlineuserlist = _sysCacheService.Get<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
 
         var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
         if (user == null) return;
@@ -81,7 +81,7 @@ public class SysMessageService : ISysMessageService, IDynamicApiController, ITra
     [HttpPost("sysMessage/users")]
     public async Task SendMessageToUsers(MessageInput input)
     {
-        var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
+        var onlineuserlist = _sysCacheService.Get<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
 
         var userlist = new List<string>();
         foreach (var item in onlineuserlist)

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -8,7 +8,7 @@ public class SysOrgService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysOrg> _sysOrgRep;
     private readonly IUserManager _userManager;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
     private readonly SysUserOrgService _sysUserOrgService;
     private readonly SysUserRoleService _sysUserRoleService;
     private readonly SysRoleOrgService _sysRoleOrgService;
@@ -16,7 +16,7 @@ public class SysOrgService : IDynamicApiController, ITransient
 
     public SysOrgService(SqlSugarRepository<SysOrg> sysOrgRep,
         IUserManager userManager,
-        ISysCacheService sysCacheService,
+        SysCacheService sysCacheService,
         SysUserOrgService sysUserOrgService,
         SysUserRoleService sysUserRoleService,
         SysRoleOrgService sysRoleOrgService,
@@ -102,7 +102,7 @@ public class SysOrgService : IDynamicApiController, ITransient
                 OrgId = newOrg.Id
             });
             orgIdList.Add(newOrg.Id);
-            await _sysCacheService.SetOrgIdList(userId, orgIdList); // 刷新缓存
+            _sysCacheService.SetOrgIdList(userId, orgIdList); // 刷新缓存
         }
         return newOrg.Id;
     }
@@ -190,7 +190,7 @@ public class SysOrgService : IDynamicApiController, ITransient
             return new List<long>();
 
         var userId = _userManager.UserId;
-        var orgIdList = await _sysCacheService.GetOrgIdList(userId); // 取缓存
+        var orgIdList = _sysCacheService.GetOrgIdList(userId); // 取缓存
         if (orgIdList == null || orgIdList.Count < 1)
         {
             // 用户机构集合
@@ -199,7 +199,7 @@ public class SysOrgService : IDynamicApiController, ITransient
             var orgList2 = await GetUserRoleOrgIdList(userId);
             // 并集机构集合
             orgIdList = orgList1.Concat(orgList2).Distinct().ToList();
-            await _sysCacheService.SetOrgIdList(userId, orgIdList); // 存缓存
+            _sysCacheService.SetOrgIdList(userId, orgIdList); // 存缓存
         }
         return orgIdList;
     }
@@ -247,7 +247,7 @@ public class SysOrgService : IDynamicApiController, ITransient
         var orgIdList2 = await GetOrgIdListByDataScope(strongerDataScopeType);
 
         // 缓存当前用户最大角色数据范围
-        await _sysCacheService.SetMaxDataScopeType(_userManager.UserId, strongerDataScopeType);
+        _sysCacheService.SetMaxDataScopeType(_userManager.UserId, strongerDataScopeType);
 
         // 并集机构集合
         return orgIdList1.Concat(orgIdList2).Distinct().ToList();

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/Role/SysRoleMenuService.cs

@@ -6,10 +6,10 @@
 public class SysRoleMenuService : ITransient
 {
     private readonly SqlSugarRepository<SysRoleMenu> _sysRoleMenuRep;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
 
     public SysRoleMenuService(SqlSugarRepository<SysRoleMenu> sysRoleMenuRep,
-        ISysCacheService sysCacheService)
+        SysCacheService sysCacheService)
     {
         _sysRoleMenuRep = sysRoleMenuRep;
         _sysCacheService = sysCacheService;
@@ -60,8 +60,8 @@ public class SysRoleMenuService : ITransient
         await _sysRoleMenuRep.InsertRangeAsync(menus);
 
         // 清除缓存
-        await _sysCacheService.DelByPatternAsync(CacheConst.KeyMenu);
-        await _sysCacheService.DelByPatternAsync(CacheConst.KeyPermission);
+        _sysCacheService.RemoveByPrefixKey(CacheConst.KeyMenu);
+        _sysCacheService.RemoveByPrefixKey(CacheConst.KeyPermission);
     }
 
     /// <summary>

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs

@@ -8,7 +8,7 @@ public class SysRoleService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysRole> _sysRoleRep;
     private readonly IUserManager _userManager;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
     private readonly SysRoleOrgService _sysRoleOrgService;
     private readonly SysRoleMenuService _sysRoleMenuService;
     private readonly SysOrgService _sysOrgService;
@@ -16,7 +16,7 @@ public class SysRoleService : IDynamicApiController, ITransient
 
     public SysRoleService(SqlSugarRepository<SysRole> sysRoleRep,
         IUserManager userManager,
-        ISysCacheService sysCacheService,
+        SysCacheService sysCacheService,
         SysRoleOrgService sysRoleOrgService,
         SysRoleMenuService sysRoleMenuService,
         SysOrgService sysOrgService,
@@ -146,7 +146,7 @@ public class SysRoleService : IDynamicApiController, ITransient
     public async Task GrantRoleDataScope(RoleOrgInput input)
     {
         // 删除所有用户机构缓存
-        await _sysCacheService.DelByPatternAsync(CacheConst.KeyOrgIdList);
+        _sysCacheService.RemoveByPrefixKey(CacheConst.KeyOrgIdList);
 
         var role = await _sysRoleRep.GetFirstAsync(u => u.Id == input.Id);
         var dataScope = input.DataScope;

+ 10 - 10
Admin.NET/Admin.NET.Core/Service/Timer/SysTimerService.cs

@@ -7,10 +7,10 @@
 public class SysTimerService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysTimer> _sysTimerRep;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
 
     public SysTimerService(SqlSugarRepository<SysTimer> sysTimerRep,
-        ISysCacheService sysCacheService)
+        SysCacheService sysCacheService)
     {
         _sysTimerRep = sysTimerRep;
         _sysCacheService = sysCacheService;
@@ -124,14 +124,14 @@ public class SysTimerService : IDynamicApiController, ITransient
     /// 创建定时任务
     /// </summary>
     /// <param name="input"></param>
-    private async void CreateTimer(SysTimer input)
+    private void CreateTimer(SysTimer input)
     {
         Action<SpareTimer, long> action = null;
         switch (input.RequestType)
         {
             case RequestTypeEnum.Run: // 创建本地方法委托
                 {
-                    var taskMethod = GetTimerMethodList()?.Result.FirstOrDefault(m => m.RequestUrl == input.RequestUrl);
+                    var taskMethod = GetTimerMethodList()?.FirstOrDefault(m => m.RequestUrl == input.RequestUrl);
                     if (taskMethod == null) break;
                     var typeInstance = Activator.CreateInstance(taskMethod.DeclaringType);
                     action = (Action<SpareTimer, long>)Delegate.CreateDelegate(typeof(Action<SpareTimer, long>), typeInstance, taskMethod.MethodName);
@@ -175,14 +175,14 @@ public class SysTimerService : IDynamicApiController, ITransient
         if (input.RequestType == RequestTypeEnum.Run)
         {
             var timerParaName = $"{input.TimerName}_para";
-            var timerPara = await _sysCacheService.ExistsAsync(timerParaName);
+            var timerPara = _sysCacheService.ExistKey(timerParaName);
             var requestPara = string.IsNullOrEmpty(input.RequestPara);
 
             // 若没有任务配置但存在缓存则删除
             if (requestPara && timerPara)
-                await _sysCacheService.RemoveAsync(timerParaName);
+                _sysCacheService.Remove(timerParaName);
             else if (!requestPara)
-                await _sysCacheService.SetAsync(timerParaName, JSON.Deserialize<Dictionary<string, string>>(input.RequestPara));
+                _sysCacheService.Set(timerParaName, JSON.Deserialize<Dictionary<string, string>>(input.RequestPara));
         }
 
         // 创建定时任务
@@ -205,10 +205,10 @@ public class SysTimerService : IDynamicApiController, ITransient
     /// 获取所有定时任务方法列表(贴spareTime特性)
     /// </summary>
     /// <returns></returns>
-    private async Task<IEnumerable<TimerMethod>> GetTimerMethodList()
+    private IEnumerable<TimerMethod> GetTimerMethodList()
     {
         // 有缓存就返回缓存
-        var timerMethodList = await _sysCacheService.GetAsync<IEnumerable<TimerMethod>>(CacheConst.KeyTimer);
+        var timerMethodList = _sysCacheService.Get<IEnumerable<TimerMethod>>(CacheConst.KeyTimer);
         if (timerMethodList != null) return timerMethodList;
 
         timerMethodList = App.EffectiveTypes
@@ -239,7 +239,7 @@ public class SysTimerService : IDynamicApiController, ITransient
                 };
             }));
 
-        await _sysCacheService.SetAsync(CacheConst.KeyTimer, timerMethodList);
+        _sysCacheService.Set(CacheConst.KeyTimer, timerMethodList);
         return timerMethodList;
     }
 }

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -8,7 +8,7 @@ public class SysUserService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
     private readonly IUserManager _userManager;
-    private readonly ISysCacheService _sysCacheService;
+    private readonly SysCacheService _sysCacheService;
     private readonly SysOrgService _sysOrgService;
     private readonly SysUserOrgService _sysUserOrgService;
     private readonly SysUserRoleService _sysUserRoleService;
@@ -16,7 +16,7 @@ public class SysUserService : IDynamicApiController, ITransient
 
     public SysUserService(SqlSugarRepository<SysUser> sysUserRep,
         IUserManager userManager,
-        ISysCacheService sysCacheService,
+        SysCacheService sysCacheService,
         SysOrgService sysOrgService,
         SysUserOrgService sysUserOrgService,
         SysUserRoleService sysUserRoleService,
@@ -174,7 +174,7 @@ public class SysUserService : IDynamicApiController, ITransient
     [HttpPost("/sysUser/grantOrg")]
     public async Task GrantUserOrg(UserOrgInput input)
     {
-        await _sysCacheService.RemoveAsync(CacheConst.KeyOrgIdList + $"{input.Id}"); // 清除缓存
+        _sysCacheService.Remove(CacheConst.KeyOrgIdList + $"{input.Id}"); // 清除缓存
 
         CheckDataScope(input.OrgId); // 数据范围检查
         await _sysUserOrgService.GrantUserOrg(input);

+ 5 - 4
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -123,7 +123,8 @@ public static class SqlSugarSetup
                 };
 
                 // 缓存处理过滤器
-                var queryFilterProvider = db.DataCache.Get<QueryFilterProvider>(config.ConfigId);
+                var cacheKey = $"DB:{config.ConfigId}";
+                var queryFilterProvider = db.DataCache.Get<QueryFilterProvider>(cacheKey);
                 if (queryFilterProvider == null)
                 {
                     // 配置实体假删除过滤器
@@ -135,7 +136,7 @@ public static class SqlSugarSetup
                     // 配置租户实体过滤器
                     SetTenantEntityFilter(db);
 
-                    db.DataCache.Add(config.ConfigId, db.QueryFilter);
+                    db.DataCache.Add(cacheKey, db.QueryFilter);
                 }
                 else
                 {
@@ -240,7 +241,7 @@ public static class SqlSugarSetup
     /// <summary>
     /// 配置实体机构过滤器
     /// </summary>
-    private static async void SetOrgEntityFilter(SqlSugarScopeProvider db)
+    private static void SetOrgEntityFilter(SqlSugarScopeProvider db)
     {
         // 获取业务数据表集合
         var dataEntityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass
@@ -251,7 +252,7 @@ public static class SqlSugarSetup
         if (string.IsNullOrWhiteSpace(userId)) return;
 
         // 获取用户机构Id集合
-        var orgIds = await App.GetService<SysCacheService>().GetOrgIdList(long.Parse(userId));
+        var orgIds = App.GetService<SysCacheService>().GetOrgIdList(long.Parse(userId));
         if (orgIds == null || orgIds.Count == 0) return;
 
         foreach (var dataEntityType in dataEntityTypes)

+ 1 - 1
Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj

@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Furion.Pure.Xunit" Version="4.4.4" />
+    <PackageReference Include="Furion.Pure.Xunit" Version="4.4.5" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.9" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
     <PackageReference Include="xunit" Version="2.4.2" />

+ 2 - 3
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -25,6 +25,8 @@ public class Startup : AppStartup
     {
         // 配置选项
         services.AddProjectOptions();
+        // 缓存注册
+        services.AddCache();
         // SqlSugar
         services.AddSqlSugar();
         // JWT
@@ -54,9 +56,6 @@ public class Startup : AppStartup
             })
             .AddInjectWithUnifyResult<AdminResultProvider>();
 
-        // 缓存注册
-        services.AddCache();
-
         // 第三方授权登录
         services.AddAuthentication()
             .AddWeixin(options =>