src/Library/NetPro.StackExchange.Redis/StackExchange.Redis.Extensions.Core/Implementations/RedisCacheConnectionPoolManager.cs
(开头部分) 6KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using StackExchange.Redis.Extensions.Core.Abstractions;
using StackExchange.Redis.Extensions.Core.Configuration;
using StackExchange.Redis.Extensions.Core.Models;
using System;
using System.Collections.Concurrent;
using System.Linq;
namespace StackExchange.Redis.Extensions.Core.Implementations
{
/// <inheritdoc/>
public class RedisCacheConnectionPoolManager : IRedisCacheConnectionPoolManager
{
private readonly ConcurrentBag<Lazy<StateAwareConnection>> connections;
private readonly RedisConfiguration redisConfiguration;
private readonly ILogger<RedisCacheConnectionPoolManager> logger;
/// <summary>
/// Initializes a new instance of the <see cref="RedisCacheConnectionPoolManager"/> class.
/// </summary>
/// <param name="redisConfiguration">The redis configuration.</param>
/// <param name="logger">The logger.</param>
public RedisCacheConnectionPoolManager(RedisConfiguration redisConfiguration, ILogger<RedisCacheConnectionPoolManager> logger = null)
{
this.redisConfiguration = redisConfiguration ?? throw new ArgumentNullException(nameof(redisConfiguration));
this.connections = new ConcurrentBag<Lazy<StateAwareConnection>>();
this.logger = logger ?? NullLogger<RedisCacheConnectionPoolManager>.Instance;
}
/// <inheritdoc/>
public void Dispose()
{
var activeConnections = this.connections.Where(lazy => lazy.IsValueCreated).ToList();
foreach (var connection in activeConnections)
((ConnectionMultiplexer)connection.Value).Dispose();
while (this.connections.IsEmpty == false)
this.connections.TryTake(out var taken);
}
/// <inheritdoc/>
public IConnectionMultiplexer GetConnection()
{
this.EmitConnections();
var loadedLazies = this.connections.Where(lazy => lazy.IsValueCreated);
if (loadedLazies.Count() == this.connections.Count)
return (ConnectionMultiplexer)this.connections.OrderBy(x => x.Value.TotalOutstanding()).First().Value;
return (ConnectionMultiplexer)this.connections.First(lazy => !lazy.IsValueCreated).Value;
}
/// <inheritdoc/>
public ConnectionPoolInformation GetConnectionInformations()
{
var activeConnections = 0;
后面还有 98 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。