stackexchange.mysql_.net core使用redis基于StackExchange.Redis
.net core使用redis基于StackExchange.Redis教程,具体如下
一.添加引用包
StackExchange.Redis
Microsoft.Extensions.Configuration
二.修改配置文件 appsettings.json
{
"RedisConfig": {
"Redis_Default": {
"Connection": "127.0.0.1: 6379",
"InstanceName": "Redis1: "
},
"Redis_6": {
"Connection": "127.0.0.1: 6379",
"DefaultDatabase": 6,
"InstanceName": "Redis2: "
}
}
}
三.简单封装RedisClient.cs类
public class RedisClient : IDisposable
{
private IConfigurationRoot _config;
private ConcurrentDictionary _connections;
public RedisClient(IConfigurationRoot config)
{
_config = config;
_connections = new ConcurrentDictionary();
}
///
/// 获取ConnectionMultiplexer
///
/// RedisConfig配置文件
///
private ConnectionMultiplexer GetConnect(IConfigurationSection redisConfig)
{
var redisInstanceName = redisConfig["InstanceName"];
var connStr = redisConfig["Connection"];
return _connections.GetOrAdd(redisInstanceName, p => ConnectionMultiplexer.Connect(connStr));
}
///
/// 检查入参数
///
/// RedisConfig配置文件中的 Redis_Default/Redis_6 名称
///
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;
}
///
/// 获取数据库
///
///
/// 默认为0:优先代码的db配置,其次config中的配置
///
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();
}
}
}
}
因为RedisClient 中使用了ConcurrentDictionary
所以,有了RedisClientSingleton.cs类
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;
}
}
四.测试
1、控制台程序
1)创建一个Controller程序
2)添加引用包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
3)添加appsettings.json
添加以下
"RedisConfig": {
"Redis_Default": {
"Connection": "127.0.0.1:6379",
"InstanceName": "Redis1:"
},
"Redis_6": {
"Connection": "127.0.0.1:6379",
"DefaultDatabase": 6,
"InstanceName": "Redis2:"
}
}
4)修改Program类
①添加引用using Microsoft.Extensions.Configuration;
②修改Main
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");
}
③运行后可以看到
2、web程序
①创建一个core的mvc项目
②修改Startup.cs文件
修改ConfigureServices函数
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton(Configuration);
...
}
其中的Configuration是 public IConfigurationRoot Configuration { get; }
③创建一个TestController
在修改构造函数
SimpleRedisExt _redisExt;
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 后得到
随手写的,写得比较糙。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
stackexchange.mysql_.net core使用redis基于StackExchange.Redis相关推荐
- .net core 使用redis 基于 StackExchange.Redis
一.添加引用包 StackExchange.Redis Microsoft.Extensions.Configuration 二.修改配置文件 appsettings.json {"Redi ...
- dommel mysql_.Net Core AA.FrameWork应用框架介绍
开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...
- csredis封装_ASP.NET Core 2.0下使用Redis——基于CSRedis实现
前几天挖了个坑,今天就来填这个坑了.关于在ASP.NET Core 2.0下使用Redis的问题,目前StackExchange.Redis已经支持.Net Core 2.0了,而微软提供的Micro ...
- (三)Redis for StackExchange.Redis
目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis StackExchange.Re ...
- 怎样在Redis通过StackExchange.Redis 存储集合类型List
StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中. 绝大部分原先使用ServiceStack的开发者逐渐都转了过来 ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...
- .Net大杀器之基于Newlife.Redis的可重复消费+共享订阅队列来替换第三方MQ
一.前言 消息队列(Message Queue)是分布式系统必不可少的中间件,大部分消息队列产品(如RocketMQ/RabbitMQ/Kafka等)要求团队有比较强的技术实力,不适用于中小团队,并且 ...
- redis 基于主从复制的 rce 利用方式
在2019年7月7日结束的WCTF2019 Final上,LC/BC的成员Pavel Toporkov在分享会上介绍了一种关于redis新版本的RCE利用方式,比起以前的利用方式来说,这种利用方式更为 ...
- javaweb k8s_K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程...
K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程 课程内容是关于Kubernetes微服务架构学习课程,基于K8S开展ASP.NET核心进行微 ...
最新文章
- XtraBackup
- “最粉嫩”的JVM垃圾回收器及算法,王者笔记!
- SDN控制器构建原理方法—Vecloud
- 【深入理解Java虚拟机学习笔记】第三章 垃圾收集器与内存分配策略
- 4.16访问日志不记录静态文件,访问日志切割以及静态元素过期时间
- vmware中nat模式上网
- ODI Studio(问题5)ORA-12899:列的长度不相同
- 破解版的ABBYY FineReader OCR文字识别软件,真的好用吗?
- Springboot结合Redis实现分布式定时任务
- arcface的前世今生
- 金蝶生成凭证模板_软件-金蝶外购入库凭证模版
- 移动硬盘插入提示需要格式化RAW_移动硬盘数据恢复
- 第7-9节项目2-歌手大奖赛计分系列(1)
- 安卓逆向笔记--爱加密新老对比分析
- VBA之正则表达式(33)-- 网页表格提取数据
- UE4 actor碰到炸弹血条减少
- DM8 数据守护(Data Watch)搭建
- LSTM 无法预测股票价格
- ESP8266-Arduino编程实例-BMP280气压传感器驱动
- day06 代码实现邮件自动发送
热门文章
- LeetCode 977. 有序数组的平方
- php获取周几,php怎么获得星期几
- flutter 图解_【Flutter 专题】83 图解自定义 ACEWave 波浪 Widget (一)
- ubuntu定时执行python脚本方法及实例代码
- 2.Redis数据操作
- json-ajax-jsonp-cookie
- Jupyter Notebook安装 nbextensions 插件
- linux系统限制内存使用率,linux中限制CPU和内存占用率方法
- 【美团语音交互部】 NLP/知识图谱/语音识别等算法职位开放招聘!
- Android单元测试研究与实践