csredis-in-asp.net core理论实战-哨兵模式-使用示例
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
普通模式
- appsettings.json配置项
{
"CsRedisConfig": {
"DefaultConnectString": "127.0.0.1:6379,password=,defaultDatabase=0,prefix=csredis-default-"
}
}
- 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));
...其他代码
}
- 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)服务,有三个哨兵监控。
- 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"
]
}
}
- 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));
...其他代码
}
- 使用缓存时与普通模式相同,不过关闭某一个redis服务,服务依旧可用,不过如果redis处于切换cluster过程,将会有短暂的失败,不过一会就会恢复。
相关文章
- .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐 https://www.cnblogs.com/yilezhu/p/9947905.html
- 【由浅至深】redis 实现发布订阅的几种方式 https://www.cnblogs.com/kellynic/p/9952386.html
- 深入剖析Redis系列(四) - Redis数据结构与全局命令概述 https://juejin.im/post/5bb01064e51d453eb93d8028
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理论实战-哨兵模式-使用示例的更多相关文章
- csredis-in-asp.net core理论实战-主从配置、哨兵模式
csredis GitHub https://github.com/2881099/csredis 看了github上的开源项目,上面真的只是单纯的使用文档,可能对于我这种人(菜鸟)就不太友好, 我知 ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(0) 无中生有
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(5) 用户登录
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(6) 功能管理
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
随机推荐
- ES6 学习笔记之对象的拓展
1.属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样书写更加简洁. const foo = 'bar'; const baz = {foo}; baz //{foo: &q ...
- 开发小技巧之:unicode的排序和正则匹配
目录 简介 ASCII字符的排序 本地字符的排序 为什么不使用unicode进行排序 emoji的正则匹配 总结 简介 我们知道计算机最先兴起是在国外,出于当时计算机性能的考虑和外国常用字符的考虑,最 ...
- Zabbix5.0微信报警
3.1.注测企业微信: 3.2.企业微信注册成功后进入后台管理: 3.3.添加一个部门,并记住部门id: #我这里添加的子部门ID为2 3.4.添加一个用户到上面创建的部门里面(这里采取直接将管理员添 ...
- 3、mysql的多实例配置(2)
4.设置mysql多实例启动脚本: (1)3306: [root@backup application]# cat /data/3306/mysql #!/bin/sh . /etc/init.d/f ...
- 17、mysql主从同步Last_IO_Errno错误代码说明
登录mysql从库:mysql> show slave status\G; Last_IO_Errno:1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1 ...
- 使用VS2017开发APP中使用VUE.js开发遇到打包出来的android文件 在低版本的android(4.3)中无法正常使用
使用VS2017开发VUE的APP应用遇到的问题集合 1, 打包出来的apk文件在Android 6.0版本以上手机可以正常打开,在Android 4.3版本手机上无法打开 原因:一开始猜测是不是V ...
- GYM101471D「ICPC2017 WF」Money for Nothing
「ICPC2017 WF」Money for Nothing 传送门 我们可将生产商和消费商都看成二维平面上的点,其坐标分别为 \((d_i,p_i)\),\((e_i,q_i)\). 那么问题转变为 ...
- python 获取当前py文件所在的位置 及对应的文件名称
# 导入sys整个模块 import sys # 使用sys模块名作为前缀来访问模块中的成员 print(sys.argv[0]) 当前文件名:12.py 程序运行结果: ============== ...
- JavaScript实现拖放效果
JavaScript实现拖放效果 笔者实现该效果也是套用别人的轮子的.传送门 然后厚颜无耻的贴别人的readme~,笔者为了方便查阅就直接贴了,有不想移步的可以看这篇.不过还是最好请到原作者的GitH ...
- 传统二三层转发融合SDN Openflow协议的Hybrid交换机转发流程
Hybrid 交换系统(以下简称Hybrid 交换机)是交换机融合了OVS(Openflow vswitch)原生代码,集传统和Openflow 技术于一体的转发系统.主要解决纯Openflow 基于 ...