一.添加引用包
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": ,
"InstanceName": "Redis2: "
}
}
}
三.简单封装
RedisClient.cs类

 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();
}
}
}
}
 
因为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": ,
"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");
12 }
③运行后可以看到
 
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 后得到

随手写的,写得比较糙。

.net core 使用redis 基于 StackExchange.Redis的更多相关文章

  1. 在.Net下使用redis基于StackExchange.Redis

    研究了下redis在.net下的使用,因为以前在java上用redis用的是jedis操作,在.net不是很熟悉,在网站上也看了一部分的.net下redis的使用,大部分都是ServiceStack. ...

  2. asp.net Core 使用redis(StackExchange.Redis)

    原文:asp.net Core 使用redis(StackExchange.Redis) 一.添加配置(appsettings.json) "Redis": { "Def ...

  3. 『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较

    背景 近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较. 我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis. R ...

  4. (三)Redis for StackExchange.Redis

    目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis StackExchange.Re ...

  5. [Open Source] .NET 基于StackExchange.Redis的扩展

    目录 简介 主从复制 备份与恢复 API AddOrUpdate GetOrAdd DeleteByPattern SearchKeys TransExcute Subscribe/Publish T ...

  6. 在.Net下使用redis基于StackExchange.Redis--登录功能

    研究了下redis在.net下的使用,因为以前在java上用redis用的是jedis操作,在.net不是很熟悉,在网站上也看了一部分的.net下redis的使用,大部分都是ServiceStack. ...

  7. .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用

    环境:之前一直是使用serverStack.Redis的客服端,今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExch ...

  8. 怎样在Redis通过StackExchange.Redis 存储集合类型List

    StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中. 绝大部分原先使用ServiceStack的开发者逐渐都转了过来 ...

  9. 在.net中使用redis(StackExchange.Redis)

    本文介绍如何在.net中使用redis 安装 代码使用 StackExchange.Redis基础使用 StackExchange.Redis中的事务 安装(windows平台) 安装Chocolat ...

随机推荐

  1. PHP函数内访问全局变量

    $dbcon='123'; 方法一.funtion fun1(){global $dbcon;$dbcon-> 就可以访问了.} 方法二$GLOBALS['$dbcon'];

  2. SQL中Like语句的语法

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  3. ubuntu 安装 rtpengine

    摘要 RtpEngine推荐使用Debian系统,可以看出Debian系统的安装是最简单的.我是基于ubuntu18.04安装的.需要注意的是如果你的Ubuntu系统版本太低,安装时会遇到各种的版本太 ...

  4. 编译gcc5.1.0时的报错

    编译安装gcc5.1.0时出现如下报错: configure: error: error verifying int64_t uses long long 这是由于没有安装gcc_c++导致的,安装下 ...

  5. 让你的网站用上https

    一般申请了SSL证书,会有安装教程教你一步步配置.这里照搬官方教程. 下载得到的 www.domain.com.zip 文件,解压获得3个文件夹,分别是Apache.IIS.Nginx 服务器的证书文 ...

  6. mysql-5.6.24-win32解决没有my.ini并且修改编码

    3.配置环境变量:新建一个系统变量: MYSQL_HOME, 值:D:\MySql\mysql5611  //这一步不做也行 4.修改MySql启动配置文件: 将安装目录下文件:my-default. ...

  7. 【POJ2151】Check the difficulty of problems

    题意 某场比赛有M道问题,T支队伍,和数字N给出每支队伍解决每道问题的概率. 问这场比赛满足下面两个条件的概率 1.每支队伍至少做出一道题 2.冠军队至少做出N道题. 分析 条件2是不是可以转化为 至 ...

  8. Flume NG 配置详解

    配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式,是Java属性文件格式.在相同的配置文件,可以指定一个或多个代理的配置.配置文件包括每个源,接收器和通道,把它们连接在一起, ...

  9. 英文单词cipher 和password的区别,用法有什么不同,

    ['saɪfə(r)] cipher 指一套密码系统,比如电影<风声>中破译的那个系统叫cipher:password 则指进入的指令,比如你的qq密码,电脑密码等叫password.总之 ...

  10. spring4-2-bean配置-10-通过FactoryBean配置bean

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk8AAAFHCAIAAAA3Hj/JAAAgAElEQVR4nO2dzdX0rA2Gp6asclwQTW