Просмотр исходного кода

😎优化缓存及在线用户相关

zuohuaijun 1 год назад
Родитель
Сommit
1c45fa319d

+ 6 - 4
Admin.NET/Admin.NET.Core/Cache/CacheSetup.cs

@@ -24,15 +24,17 @@ public static class CacheSetup
             {
                 Configuration = cacheOptions.Redis.Configuration,
                 Prefix = cacheOptions.Redis.Prefix
-            });
-            // 自动检测集群节点
-            redis.AutoDetect = App.GetConfig<bool>("Cache:Redis:AutoDetect", true);
+            })
+            {
+                // 自动检测集群节点
+                AutoDetect = App.GetConfig<bool>("Cache:Redis:AutoDetect", true)
+            };
             // 最大消息大小
             if (cacheOptions.Redis.MaxMessageSize > 0)
                 redis.MaxMessageSize = cacheOptions.Redis.MaxMessageSize;
 
             // 注入 Redis 缓存提供者
-            services.AddSingleton<ICacheProvider>(p => new RedisCacheProvider(p) { Cache = redis });
+            services.AddSingleton<ICacheProvider>(u => new RedisCacheProvider(u) { Cache = redis });
         }
 
         // 内存缓存兜底。在没有配置Redis时,使用内存缓存,逻辑代码无需修改

+ 1 - 2
Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs

@@ -47,7 +47,6 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
         var account = httpContext.User.FindFirst(ClaimConst.Account)?.Value;
         var realName = httpContext.User.FindFirst(ClaimConst.RealName)?.Value;
         var tenantId = (httpContext.User.FindFirst(ClaimConst.TenantId)?.Value).ToLong();
-        //var device = httpContext.GetClientDeviceInfo().Trim();
 
         if (userId < 0 || string.IsNullOrWhiteSpace(account)) return;
         var user = new SysOnlineUser
@@ -69,7 +68,7 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
         {
             _sysCacheService.HashAdd(CacheConst.KeyUserOnline, "" + user.UserId, user);
         }
-        else  // 非单用户登录则绑定用户连接信息
+        else  // 非单用户登录则绑定用户连接Id
         {
             _sysCacheService.HashAdd(CacheConst.KeyUserOnline, user.UserId + Context.ConnectionId, user);
         }

+ 16 - 18
Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs

@@ -11,7 +11,7 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 系统缓存服务 🧩
 /// </summary>
-[ApiDescriptionSettings(Order = 400)]
+[ApiDescriptionSettings(Order = 400, Description = "系统缓存")]
 public class SysCacheService : IDynamicApiController, ISingleton
 {
     private static ICacheProvider _cacheProvider;
@@ -24,7 +24,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
     }
 
     /// <summary>
-    /// 申请分布式锁
+    /// 申请分布式锁 🔖
     /// </summary>
     /// <param name="key">要锁定的key</param>
     /// <param name="msTimeout">申请锁等待的时间,单位毫秒</param>
@@ -52,8 +52,8 @@ public class SysCacheService : IDynamicApiController, ISingleton
     public List<string> GetKeyList()
     {
         return _cacheProvider.Cache == Cache.Default
-            ? _cacheProvider.Cache.Keys.Where(u => u.StartsWith(_cacheOptions.Prefix)).Select(u => u[_cacheOptions.Prefix.Length..]).OrderBy(u => u).ToList()
-            : ((FullRedis)_cacheProvider.Cache).Search($"{_cacheOptions.Prefix}*", int.MaxValue).Select(u => u[_cacheOptions.Prefix.Length..]).OrderBy(u => u).ToList();
+            ? [.. _cacheProvider.Cache.Keys.Where(u => u.StartsWith(_cacheOptions.Prefix)).Select(u => u[_cacheOptions.Prefix.Length..]).OrderBy(u => u)]
+            : [.. ((FullRedis)_cacheProvider.Cache).Search($"{_cacheOptions.Prefix}*", int.MaxValue).Select(u => u[_cacheOptions.Prefix.Length..]).OrderBy(u => u)];
     }
 
     /// <summary>
@@ -81,24 +81,24 @@ public class SysCacheService : IDynamicApiController, ISingleton
         return !string.IsNullOrWhiteSpace(key) && _cacheProvider.Cache.Set($"{_cacheOptions.Prefix}{key}", value, expire);
     }
 
-    public async Task<TR> AdGetAsync<TR>(String cacheName, Func<Task<TR>> del, TimeSpan? expiry = default(TimeSpan?)) where TR : class
+    public async Task<TR> AdGetAsync<TR>(String cacheName, Func<Task<TR>> del, TimeSpan? expiry = default) where TR : class
     {
-        return await AdGetAsync<TR>(cacheName, del, new object[] { }, expiry);
+        return await AdGetAsync<TR>(cacheName, del, [], expiry);
     }
 
-    public async Task<TR> AdGetAsync<TR, T1>(String cacheName, Func<T1, Task<TR>> del, T1 t1, TimeSpan? expiry = default(TimeSpan?)) where TR : class
+    public async Task<TR> AdGetAsync<TR, T1>(String cacheName, Func<T1, Task<TR>> del, T1 t1, TimeSpan? expiry = default) where TR : class
     {
-        return await AdGetAsync<TR>(cacheName, del, new object[] { t1 }, expiry);
+        return await AdGetAsync<TR>(cacheName, del, [t1], expiry);
     }
 
-    public async Task<TR> AdGetAsync<TR, T1, T2>(String cacheName, Func<T1, T2, Task<TR>> del, T1 t1, T2 t2, TimeSpan? expiry = default(TimeSpan?)) where TR : class
+    public async Task<TR> AdGetAsync<TR, T1, T2>(String cacheName, Func<T1, T2, Task<TR>> del, T1 t1, T2 t2, TimeSpan? expiry = default) where TR : class
     {
-        return await AdGetAsync<TR>(cacheName, del, new object[] { t1, t2 }, expiry);
+        return await AdGetAsync<TR>(cacheName, del, [t1, t2], expiry);
     }
 
-    public async Task<TR> AdGetAsync<TR, T1, T2, T3>(String cacheName, Func<T1, T2, T3, Task<TR>> del, T1 t1, T2 t2, T3 t3, TimeSpan? expiry = default(TimeSpan?)) where TR : class
+    public async Task<TR> AdGetAsync<TR, T1, T2, T3>(String cacheName, Func<T1, T2, T3, Task<TR>> del, T1 t1, T2 t2, T3 t3, TimeSpan? expiry = default) where TR : class
     {
-        return await AdGetAsync<TR>(cacheName, del, new object[] { t1, t2, t3 }, expiry);
+        return await AdGetAsync<TR>(cacheName, del, [t1, t2, t3], expiry);
     }
 
     private async Task<T> AdGetAsync<T>(string cacheName, Delegate del, Object[] obs, TimeSpan? expiry) where T : class
@@ -116,17 +116,17 @@ public class SysCacheService : IDynamicApiController, ISingleton
 
     public T Get<T>(String cacheName, object t1)
     {
-        return Get<T>(cacheName, new object[] { t1 });
+        return Get<T>(cacheName, [t1]);
     }
 
     public T Get<T>(String cacheName, object t1, object t2)
     {
-        return Get<T>(cacheName, new object[] { t1, t2 });
+        return Get<T>(cacheName, [t1, t2]);
     }
 
     public T Get<T>(String cacheName, object t1, object t2, object t3)
     {
-        return Get<T>(cacheName, new object[] { t1, t2, t3 });
+        return Get<T>(cacheName, [t1, t2, t3]);
     }
 
     private T Get<T>(String cacheName, Object[] obs)
@@ -323,9 +323,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
     {
         var hash = GetHashMap<T>(key);
         if (hash.ContainsKey(hashKey))
-        {
             hash[hashKey] = value;
-        }
         else
             hash.Add(hashKey, value);
     }
@@ -355,7 +353,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
     public T HashGetOne<T>(string key, string field)
     {
         var hash = GetHashMap<T>(key);
-        return hash.ContainsKey(field) ? hash[field] : default(T);
+        return hash.TryGetValue(field, out T value) ? value : default;
     }
 
     /// <summary>

+ 18 - 19
Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Admin.NET.Plugin.WorkWeixin.csproj

@@ -1,24 +1,23 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
-	<PropertyGroup>
-		<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
-		<NoWarn>1701;1702;1591;8632</NoWarn>
-		<ImplicitUsings>enable</ImplicitUsings>
-		<Nullable>disable</Nullable>
-		<GenerateDocumentationFile>True</GenerateDocumentationFile>
-		<Copyright>Admin.NET</Copyright>
-		<Description>Admin.NET 通用权限开发平台</Description>
-		<RootNamespace>Admin.NET.Plugin.WorkWeixin</RootNamespace>
-	</PropertyGroup>
+  <PropertyGroup>
+    <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
+    <NoWarn>1701;1702;1591;8632</NoWarn>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <Copyright>Admin.NET</Copyright>
+    <Description>Admin.NET 通用权限开发平台</Description>
+  </PropertyGroup>
 
-	<ItemGroup>
-		<None Update="Configuration\**">
-			<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-		</None>
-	</ItemGroup>
+  <ItemGroup>
+    <None Update="Configuration\**">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
 
-	<ItemGroup>
-		<ProjectReference Include="..\..\Admin.NET.Core\Admin.NET.Core.csproj" />
-	</ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Admin.NET.Core\Admin.NET.Core.csproj" />
+  </ItemGroup>
 
-</Project>
+</Project>