csredis 开源地址

续上篇

示例源码

https://github.com/luoyunchong/dotnetcore-examples/tree/master/dotnet-core-redis

前提

  • 安装并配置好redis服务,可用。
  • vs2017或vs2019或vscode
  • .net core 2.2+ sdk

创建一个. NET Core WebAPI项目

想执行 . NET Core CLI命令行,要cd到csproj同级目录中

dotnet add package CSRedisCore
#mvc分布式缓存注入
dotnet add package Caching.CSRedis



程序包管理控制台(Package Manager)中运行,选择你的项目

Install-Package CSRedisCore
Install-Package Caching.CSRedis

普通模式

  1. appsettings.json配置项
{
"CsRedisConfig": {
"DefaultConnectString": "127.0.0.1:6379,password=,defaultDatabase=0,prefix=csredis-default-"
}
}
  1. Startup.cs中配置如下
public void ConfigureServices(IServiceCollection services)
{
// eg 1.单个redis实现 普通模式
//CSRedisClient csredis = new CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=csredis,prefix=csredis-example");
//eg 2.单个redis,使用appsettings.json中的配置项
IConfigurationSection configurationSection = Configuration.GetSection("CsRedisConfig:DefaultConnectString");
CSRedisClient csredis = new CSRedisClient(configurationSection.Value); //初始化 RedisHelper
RedisHelper.Initialization(csredis);
//注册mvc分布式缓存
services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance)); ...其他代码 }
  1. ValuesController.cs

通过静态方法调用,键为test1 ,value为前台传来的值,缓存60s

获取值Get方法, test1作为键,返回值给前台。60s后再获取,将无法得到值。

// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
RedisHelper.Set("test1", value, 60);
} // GET api/values
[HttpGet]
public ActionResult<string> Get()
{
return RedisHelper.Get("test1");
}

普通模式-控制台

   class Program
{
static void Main(string[] args)
{
var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=CsRedis,prefix=CsRedis_ConSole_Example");
RedisHelper.Initialization(csredis); RedisHelper.Set("test1", "123123", 60);
string result = RedisHelper.Get("test1");
Console.WriteLine("key:test1,value:" + result); Console.ReadKey();
}
}

哨兵模式

前提

  • 了解哨兵模式的作用
  • 并有一个可用的主(master)redis服务,二个从(slaver)服务,有三个哨兵监控。
  1. appsettings.json配置项
{
"CsRedisConfig": {
"SentinelConnectString": "mymaster,password=,prefix=csredis-example-",
"Sentinel": [
"127.0.0.1:26379",
"127.0.0.1:26380",
"127.0.0.1:26381"
]
}
}
  1. Startup.cs中配置如下
public void ConfigureServices(IServiceCollection services)
{
//eg.3 使用appsettings.json,哨兵模式
IConfigurationSection configurationSection = Configuration.GetSection("CsRedisConfig:SentinelConnectString"); string[] sentinelValues = Configuration.GetSection("CsRedisConfig:Sentinel").Get<string[]>(); CSRedisClient csredis = new CSRedisClient(configurationSection.Value, sentinelValues); //初始化 RedisHelper
RedisHelper.Initialization(csredis);
//注册mvc分布式缓存
services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance)); ...其他代码
}
  1. 使用缓存时与普通模式相同,不过关闭某一个redis服务,服务依旧可用,不过如果redis处于切换cluster过程,将会有短暂的失败,不过一会就会恢复。

相关文章

RedisHelper 与redis-cli命令行保持一致的api,会使用redis相关命令,即会使用RedisHelper方法

配合redis-cli命令行

  static void Main()
{
CSRedisClient csredis = new CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=CsRedis,prefix=CsRedis_ConSole_Example");
RedisHelper.Initialization(csredis); Test();
Console.ReadKey();
} static void Test()
{
//1.set key value [ex seconds] [px milliseconds] [nx|xx]
//setex key seconds value #设定键的值,并指定此键值对应的 有效时间。
//setnx key value #键必须 不存在,才可以设置成功。如果键已经存在,返回 0。
RedisHelper.Set("redis-key", "just a string value", 50);//setex "redis-key" 50 "just a string value" RedisHelper.Set("redis-key-class",DateTime.Now, 30); //1.1.2. 获取值
//get key
//如果要获取的 键不存在,则返回 nil(空)。
string redisValue = RedisHelper.Get("redis-key");
Console.WriteLine($"setex redis-key 50 just a string value ,RedisHelper.Get()得到值如下:{redisValue}");
DateTime now = RedisHelper.Get<DateTime>("redis-key-class");
Console.WriteLine($"setex redis-key-class DateTime.Now,RedisHelper.Get()值如下{now}"); //1.1.3. 批量设置值
//mset key value [key value ...]
RedisHelper.MSet("a", "1", "b", "2", "c", "3","d","4");//等价于mset a 1 b 2 c 3 d 4 //1.1.4. 批量获取值
//mget key [key ...] string[] mgetValues = RedisHelper.MGet<string>("a", "b", "c","d");
Console.WriteLine($"mset a 1 b 2 c 3 d 4, RedisHelper.MGet()得到的值是");
foreach (var mgetValue in mgetValues)
{
Console.Write($"{mgetValue}、");
}
Console.WriteLine(); //1.1.5. 计数
//incr key
//incr 命令用于对值做 自增操作 //自增指定数字
long incr = RedisHelper.IncrBy("key");
Console.WriteLine($"incr key, incr得到的值是{incr}");
//设置自增数字的增量值
incr = RedisHelper.IncrBy("key",2);
Console.WriteLine($"再次incrby key 2, incr得到的值是{incr}"); incr = RedisHelper.IncrBy("key", -2);
Console.WriteLine($"再次decrby key -2, incr得到的值是{incr}"); //exists key
bool isExistsKey = RedisHelper.Exists("new-key");
Console.WriteLine($"exists key ,value:{isExistsKey}"); double incrByFloat=RedisHelper.IncrByFloat("key-float", 0.1);
Console.WriteLine($"incrbyfloat key-float 0.1,value:{incrByFloat}");
}

csredis-in-asp.net core理论实战-哨兵模式-使用示例的更多相关文章

  1. csredis-in-asp.net core理论实战-主从配置、哨兵模式

    csredis GitHub https://github.com/2881099/csredis 看了github上的开源项目,上面真的只是单纯的使用文档,可能对于我这种人(菜鸟)就不太友好, 我知 ...

  2. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  4. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  9. Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

随机推荐

  1. DOS命令行(8)——netsh-网络配置命令行工具

    netsh 介绍与语法 netsh(Network Shell) 是一个windows系统本身提供的功能强大的网络配置命令行工具,可用来显示与修改当前正在运行的计算机的网络配置(如:IP地址.网关.D ...

  2. 最佳实践丨使用Rancher轻松管理上万资源不是梦!

    前 言 Rancher 作为一个开源的企业级 Kubernetes 集群管理平台.你可以导入现有集群,如 ACK.TKE.EKS.GKE,或者使用 RKE.RKE2.K3s 自定义部署集群. 作为业界 ...

  3. 关于使用Draw.io画数据库E-R图的说明

    背景简介 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. diagrams.net是用于构建图表 ...

  4. 低代码开发LCDP,Power Apps系列 - 搭建入职选购电脑设备案例

    低代码简介 上世纪八十年代,美国就有一些公司和实验室开始了可视化编程的研究,做出了4GL"第四代编程语言",到后来衍生成VPL"Visual Programming La ...

  5. 教你写百分九十的shell

    本文章主要内容来自菜鸟教程 , 也添加了一些知识点 shell脚本? 在说什么是shell脚本之前,先说说什么是shell.shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作 ...

  6. NameServer 核心原理解析

    在之前的文章中,已经把 Broker.Producer 和 Conusmer 的部分源码和核心的机制介绍的差不多了,但是其实 RocketMQ 中还有一个比较关键但是我们平时很容易忽略的组件--Nam ...

  7. awk中printf的用法

    printf函数   打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返 ...

  8. C# 8.0和.NET Core 3.0高级编程 分享笔记一:C#8.0与NET Core 3.0入门

    在学习C#相关知识的过程中,我们使用Visual Studio Code来入门整个C#. 一.安装Visual Studio Core环境 通过https://code.visualstudio.co ...

  9. sqlplus 删除^H处理

    1.在oracle用户下更改 2.在".profile"或者"~/.bash_profile"添加 stty erase ^H 3.wq,保存退出 stty时一 ...

  10. tr 字符转换命令

    tr:可以用来删除一段信息当中的文字,或者是进行文字信息的替换 语法:tr [parameter] set1 ...参数: -d:删除信息当中的set1这个字符 -s:替换掉重复的字符 举例: 将la ...