{
"RedisConfig": {
"Redis_Default": {
"Connection": "127.0.0.1: 6379",
"InstanceName": "Redis1: "
},
"Redis_6": {
"Connection": "127.0.0.1: 6379",
"DefaultDatabase": 6,
"InstanceName": "Redis2: "
}
}
}
public class RedisClient : IDisposable
{
private IConfigurationRoot _config;
private ConcurrentDictionary<string, ConnectionMultiplexer> _connections;
public RedisClient(IConfigurationRoot config)
{
_config = config;
_connections = new ConcurrentDictionary<string, ConnectionMultiplexer>();
}
/// <summary>
/// 获取ConnectionMultiplexer
/// </summary>
/// <param name="redisConfig">RedisConfig配置文件</param>
/// <returns></returns>
private ConnectionMultiplexer GetConnect(IConfigurationSection redisConfig)
{
var redisInstanceName = redisConfig["InstanceName"];
var connStr = redisConfig["Connection"];
return _connections.GetOrAdd(redisInstanceName, p => ConnectionMultiplexer.Connect(connStr));
}
/// <summary>
/// 检查入参数
/// </summary>
/// <param name="configName">RedisConfig配置文件中的 Redis_Default/Redis_6 名称</param>
/// <returns></returns>
private IConfigurationSection CheckeConfig(string configName)
{
IConfigurationSection redisConfig = _config.GetSection("RedisConfig").GetSection(configName);
if (redisConfig == null)
{
throw new ArgumentNullException($"{configName}找不到对应的RedisConfig配置!");
}
var redisInstanceName = redisConfig["InstanceName"];
var connStr = redisConfig["Connection"];
if (string.IsNullOrEmpty(redisInstanceName))
{
throw new ArgumentNullException($"{configName}找不到对应的InstanceName");
}
if (string.IsNullOrEmpty(connStr))
{
throw new ArgumentNullException($"{configName}找不到对应的Connection");
}
return redisConfig;
}
/// <summary>
/// 获取数据库
/// </summary>
/// <param name="configName"></param>
/// <param name="db">默认为0:优先代码的db配置,其次config中的配置</param>
/// <returns></returns>
public IDatabase GetDatabase(string configName = null, int? db = null)
{
int defaultDb = 0;
IConfigurationSection redisConfig = CheckeConfig(configName);
if (db.HasValue)
{
defaultDb = db.Value;
}
else
{
var strDefalutDatabase = redisConfig["DefaultDatabase"];
if (!string.IsNullOrEmpty(strDefalutDatabase) && Int32.TryParse(strDefalutDatabase, out var intDefaultDatabase))
{
defaultDb = intDefaultDatabase;
}
}
return GetConnect(redisConfig).GetDatabase(defaultDb);
}
public IServer GetServer(string configName = null, int endPointsIndex = 0)
{
IConfigurationSection redisConfig = CheckeConfig(configName);
var connStr = redisConfig["Connection"];
var confOption = ConfigurationOptions.Parse((string)connStr);
return GetConnect(redisConfig).GetServer(confOption.EndPoints[endPointsIndex]);
}
public ISubscriber GetSubscriber(string configName = null)
{
IConfigurationSection redisConfig = CheckeConfig(configName);
return GetConnect(redisConfig).GetSubscriber();
}
public void Dispose()
{
if (_connections != null && _connections.Count > 0)
{
foreach (var item in _connections.Values)
{
item.Close();
}
}
}
}
public class RedisClientSingleton
{
private static RedisClient _redisClinet;
private RedisClientSingleton() { }
private static object _lockObj = new object();
public static RedisClient GetInstance(IConfigurationRoot config)
{
if (_redisClinet == null)
{
lock (_lockObj)
{
if (_redisClinet == null)
{
_redisClinet = new RedisClient(config);
}
}
}
return _redisClinet;
}
}
"RedisConfig": {
"Redis_Default": {
"Connection": "127.0.0.1:6379",
"InstanceName": "Redis1:"
},
"Redis_6": {
"Connection": "127.0.0.1:6379",
"DefaultDatabase": 6,
"InstanceName": "Redis2:"
}
}
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
IConfigurationRoot configuration = builder.Build();
var redisClient = RedisClientSingleton.GetInstance(configuration);
var redisDatabase = redisClient.GetDatabase("Redis_Default");
redisDatabase.StringSet("TestStrKey", "TestStrValue");
}
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton(Configuration);
...
}
public TokenTranslateController(IConfigurationRoot config)//, IConfigurationRoot config)
{
_config = config;
IDatabase redisDataBase = RedisClientSingleton.GetInstance(_config).GetDatabase("Redis_Default");
}
public string Post(string value)
{
redisDataBase.StringSet("TestMvcRedis", value);
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有