热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.netcore使用redis基于StackExchange.Redis

.netcore使用redis基于StackExchange.Redis教程,具体如下一.添加引用包StackExchange.RedisMicrosoft.Extensions.Configuration二.修改配置文件appsetting

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

随手写的,写得比较糙。

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


推荐阅读
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
author-avatar
水晶玻璃新座
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有