一.添加引用包
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. myBaits association的使用

    转自:https://blog.csdn.net/victor_cindy1/article/details/50194879 >

  2. django -- url (模版语言{{ request.path_info }})

    在django的模版语言中中可以使用   {{ request.path_info }} 帮助生成url. urls.py from django.conf.urls import url, incl ...

  3. nginx 里设置font-face 跨域

    server { ... # Fix @font-face cross-domain restriction in Firefox location ~* \.(eot|ttf|woff)$ { ad ...

  4. iOS 上的蓝牙框架 - Core Bluetooth for iOS

    原文: Core Bluetooth for iOS 6 Core Bluetooth 是在iOS5首次引入的,它允许iOS设备可以使用健康,运动,安全,自动化,娱乐,附近等外设数据.在iOS 6 中 ...

  5. 【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维

    [1]无监督算法 [2]聚类 [3]代价函数 [4] [5]K的选择 [6]降维 Answer:本来是 n 维,降维之后变成 k 维(k ≤ n) [7] [8] Answer: 斜率-1 [9] A ...

  6. XHTML的规范化

    -------------------siwuxie095                                 XHTML 简介         1.什么是 XHTML?     XHTM ...

  7. Sql Server 2008R2 数据库发布与订阅

    背景描述: 发布服务器A: (远程端) , 数据库服务名: GUANWANG1 订阅服务器B: (本机)   ,  数据库服务名: PC-LLRDBA 需要从服务器A中数据库发布,然后在B中订阅A发布 ...

  8. UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释(转)

    layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit—————— - (void ...

  9. dll详解

    [转]http://www.cnblogs.com/xuemaxiongfeng/articles/2461632.html 不解为什么要用WINAPI宏定义,查了后发现下面的定义.于是乎需要区别 _ ...

  10. TF Boys (TensorFlow Boys ) 养成记(一):TensorFlow 基本操作

    本资料是在Ubuntu14.0.4版本下进行,用来进行图像处理,所以只介绍关于图像处理部分的内容,并且默认TensorFlow已经配置好,如果没有配置好,请参考官方文档配置安装,推荐用pip安装.关于 ...