public class WaterRedisClient
{
public static WaterRedisClient WaterRedisClientInstace() {
return new WaterRedisClient();
}
public static readonly object obj = new object();
private static int capacity = 0;
public List<ClientManager> GetClientManagers()
{
return ClientManagers;
}
public WaterRedisClient()
{
ClientManagers = new List<ClientManager>();//初次需要实例化
}
public ClientManager GetWaterClientManager()
{
ClientManager clientManager = null;
if (ClientManagers!=null)
{
if (ClientManagers.Any(p => !p.IsUseing))
{
lock (obj)
{
if (ClientManagers.Any(p => !p.IsUseing))
{
clientManager = ClientManagers.FirstOrDefault(p => !p.IsUseing);
if (clientManager != null) clientManager.IsUseing = true;
}
}
}
}
if (clientManager == null)
{
clientManager = new ClientManager(ConnectionMultiplexer.Connect(string.Join(",", List<string>RedisCluster)));//集群(IP:端口)数组
lock (obj)
{
if (capacity < 50)
{
capacity++;
ClientManagers.Add(clientManager);
}
}
}
return clientManager;
}
protected List<ClientManager> ClientManagers { get; private set; }
public class ClientManager : IDisposable
{
public ClientManager(ConnectionMultiplexer redis)
{
this.Redis = redis;
this.IsUseing = true;
CreateTime = DateTime.Now;
}
public ConnectionMultiplexer Redis { get; set; }
public DateTime CreateTime { get; set; }
public bool IsUseing { get; set; }
public void Dispose()
{
IsUseing = false;
}
}
}
{
public static WaterRedisClient WaterRedisClientInstace() {
return new WaterRedisClient();
}
public static readonly object obj = new object();
private static int capacity = 0;
public List<ClientManager> GetClientManagers()
{
return ClientManagers;
}
public WaterRedisClient()
{
ClientManagers = new List<ClientManager>();//初次需要实例化
}
public ClientManager GetWaterClientManager()
{
ClientManager clientManager = null;
if (ClientManagers!=null)
{
if (ClientManagers.Any(p => !p.IsUseing))
{
lock (obj)
{
if (ClientManagers.Any(p => !p.IsUseing))
{
clientManager = ClientManagers.FirstOrDefault(p => !p.IsUseing);
if (clientManager != null) clientManager.IsUseing = true;
}
}
}
}
if (clientManager == null)
{
clientManager = new ClientManager(ConnectionMultiplexer.Connect(string.Join(",", List<string>RedisCluster)));//集群(IP:端口)数组
lock (obj)
{
if (capacity < 50)
{
capacity++;
ClientManagers.Add(clientManager);
}
}
}
return clientManager;
}
protected List<ClientManager> ClientManagers { get; private set; }
public class ClientManager : IDisposable
{
public ClientManager(ConnectionMultiplexer redis)
{
this.Redis = redis;
this.IsUseing = true;
CreateTime = DateTime.Now;
}
public ConnectionMultiplexer Redis { get; set; }
public DateTime CreateTime { get; set; }
public bool IsUseing { get; set; }
public void Dispose()
{
IsUseing = false;
}
}
}