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");

}

③运行后可以看到

175d28a20386532f4fe82461d87a8784.png

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 后得到

68bdf65fb73338552f6216dd06db3734.png

随手写的,写得比较糙。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache网站服务

Apache 下载地址: http://mirror.bit.edu.cn/apache/httpd/相关软件下载地址:http://mirror.bjtu.edu.cn/apache/apr/apr          http://mirror.bjtu.edu.cn/apache/apr/apr-utilApache 简介: 进程技术,高资源消耗&…

微积分的发展史

来源:数学中国早期萌芽时期:1、 古西方萌芽时期:公元前七世纪,泰勒斯对图形的面积、体积与的长度的研究就含有早期微积分的思想,尽管不是很明显。公元前三世纪,伟大的全能科学家阿基米德利用穷竭法推算出了…

c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

[c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作。首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一个连接、事务完成关闭同一个连接的一个…

AI的“色差”与“纠偏”

来源:脑极体在美国学术界声援BLM(Black Lives Matter)之后,事情的走向有点难以预料。学术界的反种族歧视反省似乎没有了下文,但是如火如荼的BLM运动早已蔓延开来,这次将矛头指向了AI界。事情的起因是杜克大…

英伟达奔驰共同发布自动驾驶系统,还自带停车功能

大数据文摘出品来源:VB编译:白浩然最近,英伟达(Nvidia)宣布为了和奔驰(Mercedes-Benz)汽车紧密合作,计划从2024年开始推出一款车载计算系统和AI基础设施,该技术于去年1月…

Gartner发布2020年数据与分析领域的十大技术趋势

来源:Gartner公司近日,Gartner发布了数据与分析领域的十大技术趋势,为数据和分析领导者的新冠疫情(COVID-19)响应和恢复工作提供指导,并为疫情后的重启做好准备。数据和分析领导者如果希望在疫情后能持续创…

java2019 数据结构算法面试题_2019年JVM最新面试题,必须收藏它

1、JVN内存结构方法区和对是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一…

前沿科技 | 中科院科学家研究揭示灵活行动选择的神经机制

来源:中国科学院6月24日,中国科学院科学家团队——脑科学与智能技术卓越创新中心(神经科学研究所)、上海脑科学与类脑研究中心、神经科学国家重点实验室姚海珊研究组在eLife上在线发表了题为《次级运动皮层在灵活视觉分类行为中参…

中科院调查组成立!杨辉发表声明,并对举报信作出详细回应

左:加州大学圣地亚哥分校教授付向东。右:中科院神经所青年 PI 杨辉。图片来源:UCSD/一席演讲来源 BioArtReports 中科院神经所 等整理 科研圈7 月 2 日,网络消息称加州大学圣地亚哥分校细胞和分子医学系教授付向东发布实名举报信&…

java lookandfeel nimbus_动态改变LookAndFeel

LookAndFeel可以改变图形界面的风格,比如说可以将Java的默认界面改变成仿Windows,UNIX等其它风格的界面,主要有以下几种界面风格:metal(默认):"javax.swing.plaf.metal.MetalLookAndFeel"windows:"com.sun.java.sw…

盘点华为系工控企业——中国A股上市公司最多的创业体系

来源:OFweek工控别看今日华为风光无限,美国举国打压下更显华为雄厚实力;但早在2000年左右,全球IT产业泡沫破灭,作为通信设备商,华为也受累进入寒冬,任正非为了鼓励团队士气,写出了著…

秦川团队《科学》刊发研究:新冠感染恒河猴康复后不会再感染

来源:澎湃新闻新冠病毒(SARS-CoV-2)肺炎疫情全球大流行的背景下,恢复期患者是否有再次感染的风险目前尚不清楚。来自中国的最新科研成果表明,原发性新冠病毒感染可防止随后再感染,这对新冠患者的预后和下一…

昨夜,5G R16标准正式冻结!5G物联网扬帆起航

作者:赵小飞物联网智库 整理发布转载请注明来源和出处导 读昨天夜里,负责5G标准的国际组织3GPP TSG#88全体会议宣布5G R16标准冻结。在新冠疫情全球肆虐的背景下,标准化推进工作遇到非常大的挑战,而3GPP的专家们依然能…

Linux下grub.cnf详解

grub.conf跟系统启动项有关,对于重置密码。来说小case。。。 1、介绍 在Red Hat Linux7.2之后,默认的引导加载程序从LTLO变为GRUB.这个引导加载程序使用户能够选择何时以及如何引导安装在计算机硬盘上的可引导的操作系统。 2、说明 变量 说…

(二)用户相关操作

一、导入jar包 见 http://pan.baidu.com/s/1dE9kMJZ 二、导入c3p0并修改值 c3p0.driverClasscom.mysql.jdbc.Driver c3p0.jdbcUrljdbc:mysql://localhost:3306/store c3p0.userroot c3p0.password123456 三、导入工具类 见 http://pan.baidu.com/s/1miutJXe 有关这些工具类的分…

你以为美国商业航天那么牛只是因为马斯克?更多原因在这里!

来源:银河航天漫游指南2020年5月31日,SpaceX的载人龙飞船成功将两位宇航员成功送往国际空间站,成为有史以来第一家将人类送入太空轨道的私营企业。美国商业航天领域的进展有目共睹。载人龙飞船起飞瞬间这次成功发射打破了传统航天领域以国家力…

java游戏应龙女魃转世_应龙和女魃的凄美爱情,究竟是爱情,还是阴谋?

人世间最痛苦的事情是什么?有人说是生老病死,也有人说是爱憎别离。对于她来说,或许最痛苦的是他的欺骗与背叛……女魃一、初见北荒往东二百里,有一座山,名唤玲珑山。山中住着一名神女,名为女魃。相传&#…

热点|因为AI不是人,美国专利局拒绝认定TA的所有发明权

来源:量子位「你不是人!」——美国专利局(USPTO)。这句话是美国专利局,对所有人工智能说的。4月27日,美国专利局出台一项规定:对于任何由人工智能独立设计发明的产品,因为AI不是自然…

登陆界面代码

1、设计思想 添加窗口界面,想i面添加一系列组件。 输入账号密码和验证码后,如果验证码正确,进行注册,否则注册失败。注册成功后,验证码自动刷新,并将注册的帐号和密码保存。注册失败后,验证码刷…

为何苹果为何苹果甘愿冒险自主研发芯片?

来源:内容来自「腾讯科技」7月4日,据外媒报道,苹果不久前宣布将把Mac上使用的处理器从英特尔芯片迁移到自己的Apple Silicon上,尽管这是意料之中的事,但苹果为何甘愿冒险甚至似乎相当渴望进行这种转型的,仍…