===============================================
2020/3 / 28_ primera edición ccb_warlock
===============================================
Recientemente tengo más tiempo para hacer el marco del trabajo de optimización, la razón se trate a Redis agrupación de conexiones es porque los datos del marco de procesamiento de la capa de enrutamiento en el momento de su lugar anormal ReDiS conexión se pueden optimizar, por lo que la función de agrupación de conexiones para Redis hicimos un estudio y pruebas.
En primer lugar, el valor de
1.1 Valor estanque
El valor aquí es simple mención en el diseño de la piscina es que cuando cierto tipo de conexiones necesitan crear varias ocasiones, y crear un costo mucho mayor que el coste de la reutilización se pueden seleccionar para optimizar la introducción del estanque este diseño.
En general, necesarios para definir el tamaño de la piscina cuando se inicializa la piscina.
Inicialmente, la piscina no es un objeto, cuando se requiere el objeto de obtener de la piscina (después de no crear automáticamente un objeto proporcionar un rastreados cuando se utiliza), cuando el objeto se utiliza hasta no hace un lanzamiento real, pero poner el objeto posterior acceso a la piscina a esperar a la siguiente necesidades de negocio.
Valor de 1,2 ReDiS estanque
Por lo general, en el proyecto de C # se utiliza principalmente como una rueda de operación StackExchange.Redis Redis, y después de la conexión TCP StackExchange.Redis ellos ReDiS mediante la creación de una serie de operaciones.
Ya que por TCP, sabemos que hay que hacer con el fin de seguimiento después de que el negocio de 3 vías apretón de manos, cuando el servicio de ejecución concurrente, estanque puede reducir mejor la sobrecarga de crear una conexión, mejorar la eficiencia conexión.
Dos, el paquete NuGet
StackExchange.Redis.ConnectionPool
PS. La versión actual es la 1.0.1 Uso
En tercer lugar, la introducción del proyecto de agrupación de conexiones Redis
3.1 precondición
Sólo probado el proyecto función de correlación núcleo asp.net base (2.2,3.1).
3.2 Adición de la información de configuración es redis
Trabajado en proyectos de centrales de ASP.NET debe ser consciente de que el sistema proporciona una grabación con los elementos de configuración appsettings.json e información de configuración en su plan de proyecto a través de la inyección de dependencia.
Appsettings.json hipótesis dice lo siguiente:
{ " Redis " : { " Host " : " localhost " , " Puerto " : 6379 , " contraseña " : " 123456 " , " poolsize " : 20 } }
3.3 Creación de la entidad que recibe la configuración definida
público de clase RedisConfig { pública cadena anfitrión { get ; establecer ; } Pública int puerto { get ; establecer ; } Pública cadena de contraseña { llegar ; establecer ; } Pública int poolsize { get ; establecer ; } }
La inyección de dependencia se añade 3,4 agrupación de conexiones
Aquí el problema no se considera la estructura del código, seguido de los Startup.cs, añada lo siguiente:
público de clase del inicio { Privado IConfiguration la {Configuración GET ;} pública del (Configuración IConfiguration) Puesta en marcha { la configuración = Configuración; } pública la IServiceProvider ConfigureServices (Servicios IServiceCollection) { // TODO // conjunto de acuerdo con el número mínimo de tráfico real de hilos ThreadPool.SetMinThreads ( 200 es , 200 es ); var redisConfig = Configuration.GetSection ( " la Redis " ) .Busque <redisConfig> (); varredisOptions = nuevos ConfigurationOptions { EndPoints = { {redisConfig.Host, redisConfig.Port} }, contraseña = redisConfig.Password, }; services.AddRedisConnectionPool (redisOptions, redisConfig.PoolSize); // TODO } }
Al proporcionar un método StackExchange.Redis.ConnectionPool llamada, que tiene el conjunto de conexiones físicas ReDiS inyecta en todo el proyecto.
En cuarto lugar, el uso de Redis de agrupación de conexiones
Desde la trama I se optimiza datos piscina interceptores conexión de la capa de enrutamiento para ir, para hacerlo se describe como un ejemplo.
público de clase RouteInterceptor: BaseInterceptor { privado ObjectPool <PooledConnectionMultiplexer> Pool { get ; establecer ; } Pública RouteInterceptor (ObjectPool <PooledConnectionMultiplexer> piscina) { piscina = piscina; } Protegido override void Handler (IInvocation invocación) { var db = 1 ; // TODO (获取要操作的db) PooledConnectionMultiplexer cliente = nula ; tratar { cliente = Pool.GetObject (); var Clientdb = redis.GetDatabase (db) // TODO } catch (Exception e) { // TODO } try { invocation.Proceed (); } Catch (Exception e) { // TODO } finalmente { cliente ? .Disponer(); } } }
Redis entonces que operan de acuerdo con el método utilizado StackExchange.Redis en él.