71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using StackExchange.Redis;
|
||
using System;
|
||
using System.Collections.Concurrent;
|
||
|
||
namespace RedisDemo
|
||
{
|
||
public class RedisHelper : IDisposable
|
||
{
|
||
//连接字符串
|
||
private string _connectionString;
|
||
//实例名称
|
||
private string _instanceName;
|
||
//默认数据库
|
||
private int _defaultDB;
|
||
private ConcurrentDictionary<string, ConnectionMultiplexer> _connections;
|
||
public RedisHelper(string connectionString, string instanceName, int defaultDB = 0)
|
||
{
|
||
_connectionString = connectionString;
|
||
_instanceName = instanceName;
|
||
_defaultDB = defaultDB;
|
||
_connections = new ConcurrentDictionary<string, ConnectionMultiplexer>();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取ConnectionMultiplexer
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
private ConnectionMultiplexer GetConnect()
|
||
{
|
||
return _connections.GetOrAdd(_instanceName, p => ConnectionMultiplexer.Connect(_connectionString));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取数据库
|
||
/// </summary>
|
||
/// <param name="configName"></param>
|
||
/// <param name="db">默认为0:优先代码的db配置,其次config中的配置</param>
|
||
/// <returns></returns>
|
||
public IDatabase GetDatabase()
|
||
{
|
||
|
||
var connectStr = _connectionString;
|
||
var conmper = ConnectionMultiplexer.Connect(connectStr);
|
||
var database = conmper.GetDatabase(0);
|
||
return database;
|
||
//return GetConnect().GetDatabase(_defaultDB);
|
||
}
|
||
|
||
public IServer GetServer(string configName = null, int endPointsIndex = 0)
|
||
{
|
||
var confOption = ConfigurationOptions.Parse(_connectionString);
|
||
return GetConnect().GetServer(confOption.EndPoints[endPointsIndex]);
|
||
}
|
||
|
||
public ISubscriber GetSubscriber(string configName = null)
|
||
{
|
||
return GetConnect().GetSubscriber();
|
||
}
|
||
|
||
public void Dispose()
|
||
{
|
||
if (_connections != null && _connections.Count > 0)
|
||
{
|
||
foreach (var item in _connections.Values)
|
||
{
|
||
item.Close();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |