فهرست منبع

改进Redis单例获取

懒得勤快 7 سال پیش
والد
کامیت
009c14dd73

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp2.0</TargetFramework>
-    <Version>1.9.5.1</Version>
+    <Version>1.9.5.2</Version>
     <Authors>懒得勤快</Authors>
     <Company>masuit.com</Company>
     <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。

+ 3 - 24
Masuit.Tools.Core/NoSQL/RedisConnectionManager.cs

@@ -1,7 +1,5 @@
 using System;
 using System.Collections.Concurrent;
-using System.Threading.Tasks;
-using Masuit.Tools.Core.Systems;
 using StackExchange.Redis;
 
 namespace Masuit.Tools.Core.NoSQL
@@ -19,10 +17,7 @@ namespace Masuit.Tools.Core.NoSQL
             get => "127.0.0.1:6379,allowadmin=true";
             set { }
         }
-
-        //private static readonly object Locker = new object();
-        //private static ConnectionMultiplexer _instance;
-        private static readonly ConcurrentDictionary<string, ConcurrentLimitedQueue<ConnectionMultiplexer>> ConnectionCache = new ConcurrentDictionary<string, ConcurrentLimitedQueue<ConnectionMultiplexer>>();
+        private static readonly ConcurrentDictionary<string, ConnectionMultiplexer> ConnectionCache = new ConcurrentDictionary<string, ConnectionMultiplexer>();
 
         /// <summary>
         /// 对象池获取线程内唯一对象
@@ -31,15 +26,7 @@ namespace Masuit.Tools.Core.NoSQL
         {
             get
             {
-                var queue = ConnectionCache.GetOrAdd(RedisConnectionString, new ConcurrentLimitedQueue<ConnectionMultiplexer>(32));
-                if (queue.IsEmpty)
-                {
-                    Parallel.For(0, queue.Limit, i =>
-                    {
-                        queue.Enqueue(GetManager(RedisConnectionString));
-                    });
-                }
-                queue.TryDequeue(out var multiplexer);
+                var multiplexer = ConnectionCache.GetOrAdd(RedisConnectionString, GetManager(RedisConnectionString));
                 return multiplexer;
             }
         }
@@ -51,15 +38,7 @@ namespace Masuit.Tools.Core.NoSQL
         /// <returns>连接对象</returns>
         public static ConnectionMultiplexer GetConnectionMultiplexer(string connectionString)
         {
-            var queue = ConnectionCache.GetOrAdd(connectionString, new ConcurrentLimitedQueue<ConnectionMultiplexer>(32));
-            if (queue.IsEmpty)
-            {
-                Parallel.For(0, queue.Limit, i =>
-                {
-                    queue.Enqueue(GetManager(connectionString));
-                });
-            }
-            queue.TryDequeue(out var multiplexer);
+            var multiplexer = ConnectionCache.GetOrAdd(connectionString, GetManager(RedisConnectionString));
             return multiplexer;
         }
 

+ 1 - 7
Masuit.Tools.Core/NoSQL/RedisHelper.cs

@@ -11,7 +11,7 @@ namespace Masuit.Tools.NoSQL
     /// <summary>
     /// Redis操作
     /// </summary>
-    public class RedisHelper : IDisposable
+    public class RedisHelper
     {
         private int DbNum { get; }
         private readonly ConnectionMultiplexer _conn;
@@ -1101,11 +1101,5 @@ namespace Masuit.Tools.NoSQL
 
         #endregion 辅助方法
 
-        /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
-        public void Dispose()
-        {
-            _conn?.Dispose();
-            GC.SuppressFinalize(this);
-        }
     }
 }

+ 3 - 21
Masuit.Tools/NoSQL/RedisConnectionManager.cs

@@ -1,8 +1,6 @@
 using System;
 using System.Collections.Concurrent;
 using System.Configuration;
-using System.Threading.Tasks;
-using Masuit.Tools.Systems;
 using StackExchange.Redis;
 
 namespace Masuit.Tools.NoSQL
@@ -20,7 +18,7 @@ namespace Masuit.Tools.NoSQL
         /// </summary>
         public static readonly string RedisConnectionString = ConfigurationManager.ConnectionStrings["RedisHosts"]?.ConnectionString ?? "127.0.0.1:6379,allowadmin=true";
 
-        private static readonly ConcurrentDictionary<string, ConcurrentLimitedQueue<ConnectionMultiplexer>> ConnectionCache = new ConcurrentDictionary<string, ConcurrentLimitedQueue<ConnectionMultiplexer>>();
+        private static readonly ConcurrentDictionary<string, ConnectionMultiplexer> ConnectionCache = new ConcurrentDictionary<string, ConnectionMultiplexer>();
 
         /// <summary>
         /// 对象池获取线程内唯一对象
@@ -29,15 +27,7 @@ namespace Masuit.Tools.NoSQL
         {
             get
             {
-                var queue = ConnectionCache.GetOrAdd(RedisConnectionString, new ConcurrentLimitedQueue<ConnectionMultiplexer>(32));
-                if (queue.IsEmpty)
-                {
-                    Parallel.For(0, queue.Limit, i =>
-                    {
-                        queue.Enqueue(GetManager(RedisConnectionString));
-                    });
-                }
-                queue.TryDequeue(out var multiplexer);
+                var multiplexer = ConnectionCache.GetOrAdd(RedisConnectionString, GetManager(RedisConnectionString));
                 return multiplexer;
             }
         }
@@ -49,15 +39,7 @@ namespace Masuit.Tools.NoSQL
         /// <returns>连接对象</returns>
         public static ConnectionMultiplexer GetConnectionMultiplexer(string connectionString)
         {
-            var queue = ConnectionCache.GetOrAdd(connectionString, new ConcurrentLimitedQueue<ConnectionMultiplexer>(32));
-            if (queue.IsEmpty)
-            {
-                Parallel.For(0, queue.Limit, i =>
-                {
-                    queue.Enqueue(GetManager(connectionString));
-                });
-            }
-            queue.TryDequeue(out var multiplexer);
+            var multiplexer = ConnectionCache.GetOrAdd(connectionString, GetManager(RedisConnectionString));
             return multiplexer;
         }
 

+ 1 - 7
Masuit.Tools/NoSQL/RedisHelper.cs

@@ -10,7 +10,7 @@ namespace Masuit.Tools.NoSQL
     /// <summary>
     /// Redis操作
     /// </summary>
-    public class RedisHelper : IDisposable
+    public class RedisHelper
     {
         private int DbNum { get; }
         private readonly ConnectionMultiplexer _conn;
@@ -1100,11 +1100,5 @@ namespace Masuit.Tools.NoSQL
 
         #endregion 辅助方法
 
-        /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
-        public void Dispose()
-        {
-            _conn?.Dispose();
-            GC.SuppressFinalize(this);
-        }
     }
 }

+ 2 - 2
Masuit.Tools/Properties/AssemblyInfo.cs

@@ -36,7 +36,7 @@ using System.Runtime.InteropServices;
 // 方法是按如下所示使用“*”: :
 // [assembly: AssemblyVersion("1.0.*")]
 
-[assembly: AssemblyVersion("1.9.5.1")]
-[assembly: AssemblyFileVersion("1.9.5.1")]
+[assembly: AssemblyVersion("1.9.5.2")]
+[assembly: AssemblyFileVersion("1.9.5.2")]
 [assembly: NeutralResourcesLanguage("zh-CN")]