.net core使用redis基于StackExchange.Redis
 更新时间:2017年04月25日 11:37:41   作者:卮言  

这篇文章主要为大家详细介绍了.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<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 = 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 后得到

随手写的,写得比较糙。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

您可能感兴趣的文章:.net core如何使用Redis发布订阅详解Asp.net Core 使用Redis存储Session.NET Core中使用Redis与Memcached的序列化问题详析

.net
core
redis
StackExchange.Redis

相关文章
ASP.NET Core与NLog集成的完整步骤NLog是一个免费的日志记录框架,专门为.net平台下的框架提供日志功能,下面这篇文章主要给大家介绍了关于ASP.NET Core与NLog集成的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下 2018-07-07
asp.net微信开发(用户分组管理)这篇文章主要介绍了asp.net微信开发中有关用户分组管理的相关内容,需要的朋友可以参考下 2015-11-11
WPF中button按钮同时点击多次触发click解决方法这篇文章主要为大家详细介绍了WPF中button按钮同时点击多次触发click的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04
asp.ne去除html的函数代码asp.net下去除html标签的函数。 2009-05-05
Asp.net core WebApi 使用Swagger生成帮助页实例本篇文章主要介绍了Asp.net core WebApi 使用Swagger生成帮助页实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
2017-04-04
Asp.net Core 3.1基于AspectCore实现AOP实现事务、缓存拦截器功能这篇文章主要介绍了Asp.net Core 3.1基于AspectCore实现AOP实现事务、缓存拦截器功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 2020-12-12
Asp.Net数据输出到EXCEL表格中其实,利用ASP.NET输出指定内容的WORD、EXCEL、TXT、HTM等类型的文档很容易的。主要分为三步来完成。 2008-11-11
Visual Studio 2017创建.net standard类库编译出错原因及解决方法这篇文章主要为大家详细介绍了Visual Studio 2017创建.net standard类库编译出错原因及解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04
ToString()使用方法汇总(c#)ToString()使用方法汇总,需要的朋友可以参考下 2012-10-10
asp.net发布后web.config中compilation的debug的值true和false区在本篇文章里小编给大家整理的是一篇关于asp.net发布后web.config中compilation的debug的值true和false区别点内容,有需要的为朋友们可以参考下。 2020-01-01

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。