.net core 使用redis 基于 StackExchange.Redis
{
"RedisConfig": {
"Redis_Default": {
"Connection": "127.0.0.1: 6379",
"InstanceName": "Redis1: "
},
"Redis_6": {
"Connection": "127.0.0.1: 6379",
"DefaultDatabase": ,
"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 = ;
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 = )
{
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 > )
{
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": ,
"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");
12 }

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);
}
④运行value = TestMvcRedisValue 后得到

随手写的,写得比较糙。
.net core 使用redis 基于 StackExchange.Redis的更多相关文章
- 在.Net下使用redis基于StackExchange.Redis
研究了下redis在.net下的使用,因为以前在java上用redis用的是jedis操作,在.net不是很熟悉,在网站上也看了一部分的.net下redis的使用,大部分都是ServiceStack. ...
- asp.net Core 使用redis(StackExchange.Redis)
原文:asp.net Core 使用redis(StackExchange.Redis) 一.添加配置(appsettings.json) "Redis": { "Def ...
- 『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较
背景 近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较. 我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis. R ...
- (三)Redis for StackExchange.Redis
目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis StackExchange.Re ...
- [Open Source] .NET 基于StackExchange.Redis的扩展
目录 简介 主从复制 备份与恢复 API AddOrUpdate GetOrAdd DeleteByPattern SearchKeys TransExcute Subscribe/Publish T ...
- 在.Net下使用redis基于StackExchange.Redis--登录功能
研究了下redis在.net下的使用,因为以前在java上用redis用的是jedis操作,在.net不是很熟悉,在网站上也看了一部分的.net下redis的使用,大部分都是ServiceStack. ...
- .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用
环境:之前一直是使用serverStack.Redis的客服端,今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExch ...
- 怎样在Redis通过StackExchange.Redis 存储集合类型List
StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中. 绝大部分原先使用ServiceStack的开发者逐渐都转了过来 ...
- 在.net中使用redis(StackExchange.Redis)
本文介绍如何在.net中使用redis 安装 代码使用 StackExchange.Redis基础使用 StackExchange.Redis中的事务 安装(windows平台) 安装Chocolat ...
随机推荐
- 管理Entity Framework中的树结构
很多时候您需要在数据库中存储逻辑树的层次结构.这个问题有很多种实现方式,但最常见的是使用一个简单自关联的表,如下图所示 如果您映射此表与实体框架您将自动获得一个树状结构,您需将关系字段重命名,因为他们 ...
- java 蓝桥杯基础训练 回文数
public class _8回文数 { //两种方法都可以 // public static void main(String[] args) { // String zheng ="&q ...
- css水平居中,竖直居中技巧(二)
css水平居中,竖直居中技巧(二)===### 1.效果 ### 2.代码#### 2.1.index.html <!DOCTYPE html> <html lang="z ...
- 启动和关闭MySQL服务
停止mysql服务,说来简单,但不知道的话,还真是挠头.在这和mysql入门的同学们共享:) 正确方法是,进入mysql的bin目录下,然后执行./mysqladmin -uroot -p shut ...
- java程序员应该熟悉的20个有用的库(转)
优秀且经验丰富的Java开发人员的一个特点是API的广泛知识,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Blo ...
- 一张图记住TCP/IP通讯中的IP地址配置
TCP/IP通讯情景: 用网线将计算机A(服务器Server)和计算机B(Client)连接起来.程序代码在计算机A中,计算机B中安装有TCP/IP通讯助手. (图中屏幕大的是计算机A,屏幕小的笔记本 ...
- p1429 平面最近点对(加强版)
传送门 分析 我们可以枚举每一个点算它的最近点 估价函数应该分为3种情况计算: 大于max,小于min,位于min和max之间 代码 #include<iostream> #include ...
- 轻松搭建持续集成工具jenkins
1.Jenkins介绍1)什么是持续集成随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软 ...
- 实践作业3:白盒测试----总结与反思DAY12.
---恢复内容开始--- 阶段一:熟悉白盒测试方法 负责人:刘思佳 工作质量评价:用例设计详细,考虑到白盒测试基于代码,所以尽可能地覆盖更多的白盒测试方法,对系统可能存在的缺陷就更容易了解.对管理员和 ...
- 1517 u Calculate e
1. 最前面的格式要记得输入. 2. 计算的时候要从3开始重新计算, 否则会丢失精度. 3. 更快的方式就是打表. #include <iostream> using namespace ...