.Net Core 使用 CSRedisCore 访问 Redis 的哨兵和主从复制
一、创建Redis服务
运行环境是Window,安装Redis请看:安装教程。
直接开始创建Redis服务,演示就创建两个一主一从,先把安装路径下的 redis.windows.conf 文件复制一份重命名并更改端口号为6380,
并且把文件中的bind字段注释,protected-mode设置为no,
打开CMD跳转到安装目录,创建服务语句如下
D:\Redis>redis-server.exe --service-install redis.windows.conf --service-name Redis6379 --loglevel verbose
D:\Redis>redis-server.exe --service-install redis.windows.6380.conf --service-name Redis6380 --loglevel verbose
然后打开服务,如果没有运行就点击启动运行。
二、设置Redis主从复制
将6379端口的Redis作为主,6380端口的作为从,通过slaveof命令设置从Redis即可如下:
C:\Users\Xu>redis-cli -p 6380
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
我这是本地的服务所以访问没问题,如果是不同服务器的服务,请关注防火墙、ip等信息,确保服务器直接能互相访问。
三、设置哨兵
在Redis安装路径中新建哨兵配置文件sentinel.conf如下:
port 26379
protected-mode no
logfile "D:/Redis/senitnel.log"
sentinel monitor mymaster 127.0.0.1 6379 1
文件中设置了哨兵的端口、是否保护、日志文件保存地址和监听的主Redis数据库。一般是需要多个哨兵的,演示的话就创建一个,想多创建几个就多建几个配置文件,然后将哨兵设为服务,管理员打开CMD语句如下:
sc create RedisSentinel binpath= "\"D:\Redis\redis-server.exe\" --service-run sentinel.conf --service--name RedisSentienl --sentinel --loglevel verbose" start= auto
可以看到服务中已经有了,没有启动就启动下,哨兵这里如果是多台服务器就需要注意防火墙、ip等信息,否则无法连通。启动后配置文件会被写入其他的哨兵和从数据库等信息,如下
port 26379
protected-mode no
logfile "D:/Redis/senitnel.log"
sentinel myid bc139114daeb8c50b65466ae58f89822503b58da
# Generated by CONFIG REWRITE
loglevel verbose
dir "D:\\Redis"
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 127.0.0.1 6380
sentinel current-epoch 6
我们通过redis-cli命令可以进入哨兵和redis数据库查看信息,来判断是否配置正确,我们进入哨兵查看信息如下:
C:\Users\Xu>redis-cli -h 127.0.0.1 -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=1,sentinels=1
可以看到最后一条显示主数据是6379端口的,从数据一个哨兵一个,说明配置成功了(如果有问题可以通过哨兵日志等方式查看问题)。
四、在.Net Core中实现代码
在nuget中引用CSRedisCore,有两个类可以访问哨兵并访问redis数据库,分别是CSRedisClient和RedisSentinelManager。
1.RedisSentinelManager
public static void Set(int dbid)
{
using (var sentinel = new RedisSentinelManager(false, new string[] { "127.0.0.1:26379" })) //设置哨兵
{
sentinel.Connect("mymaster"); // 打开主数据库连接,参数是主数据库别称,在设置哨兵的时候有设置
var test2 = sentinel.Call(t => t.Select(dbid)); // 使用Call方法可以运行当前主数据的操作,select方法是选择数据库0-14号进行操作
sentinel.Call(t => t.Set("haha", DateTime.Now.ToString()));//执行方法
}
}
2.CSRedisClient
public class RedisCache
{
CSRedisClient[] redis = new CSRedisClient[14]; //Singleton
public RedisCache()
{
for (var a = 0; a < redis.Length; a++)
redis[a] = new CSRedisClient("mymaster,defaultDatabase=" + a, new string[] { "127.0.0.1:26379" });
}
public void Set(int dbid)
{
redis[1].Set("haha","123123");
}
}
可以手动关闭redis服务来测试,会自动切换访问的数据。
.Net Core 使用 CSRedisCore 访问 Redis 的哨兵和主从复制的更多相关文章
- csredis-in-asp.net core理论实战-主从配置、哨兵模式
csredis GitHub https://github.com/2881099/csredis 看了github上的开源项目,上面真的只是单纯的使用文档,可能对于我这种人(菜鸟)就不太友好, 我知 ...
- jedis访问redis学习笔记
最近在学习redis,在网上查了些文章,利用他人已有的知识,总结写下了这篇文章,大部分内容还是引用别人的文章内容.经过测试发现spring-data-redis现在有的版本只能支持reids 2.6和 ...
- python访问redis
python访问redis 1 Linux上安装redis a) 下载 $ wget http://download.redis.io/releases/redis-3.0.5.tar.gz b) 编 ...
- Redis Sentinel哨兵配置
概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...
- Springboot2.0访问Redis集群
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作高性能的key-value数据库.缓存和消息中间件,掌握它是程序员的必备技能,下面是一个springboot访问redis的 ...
- 【Redis】哨兵机制
一.概述 什么是哨兵机制 二.环境配置 2.1 虚拟机 2.2 安装Redis 2.3 配置主从复制 2.4 配置哨兵 2.5 测试 2.6 疑惑(待解决) 一.概述 什么是哨兵机制 Redis的哨兵 ...
- .Net Core使用分布式缓存Redis:基础
一.前言 Redis的介绍网上很多不再赘述.本次环境为net core 2.2,使用的StackExchange.Redis来操作Redis. 二.引用Microsoft.Extensions.Cac ...
- ASP.Net Core使用分布式缓存Redis从入门到实战演练
一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力. 所以经常要用到且不会频繁改变且被用户共享的 ...
- redis主从+ 哨兵模式(sentinel)+漂移VIP实现高可用系统
原文:https://www.jianshu.com/p/c2ab606b00b7 客户端程序 客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时, ...
随机推荐
- 2021升级版微服务教程3—Eureka完全使用指南
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 默认文件1610014380163 教程全目录「含视 ...
- Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG
WPF的BUG!弹出框的 自定义控件里有Popup, Popup里面放一个ListBox 在ListBox中的SelectionChange事件触发关闭弹出框后,主窗体存在一定概率卡死(但点击标题又能 ...
- WPF 关于拖拽打开文件的注意事项
由于开发需求,需要开发一个类似Win图片浏览的工具 当然也涉及到了拖拽打开的需求 按照固有思路: <Grid x:Name="grid1" AllowDrop="T ...
- openstack octavia的实现与分析(二)原理,架构与基本流程
[了解] 其实说白了,Octavia就是将用户的API请求经过逻辑处理,转换成Haproxy或者Nginx的配置参数,下发到amphora虚机中. Octavia的内部实现中,逻辑流程的处理主要使用T ...
- LeetCode-151-中等-翻转字符串里面的单词
问题描述 给定一个字符串,逐个翻转字符串中的每个单词. 说明: 无空格字符构成一个 单词 . 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括. 如果两个单词间有多余的空格,将反转 ...
- 【EXP/IMP】问题总结
为了使测试与生产数据保持一致,只需要导出数据的时候,可以将测试库的表truncate,保留其它如索引,trigger,constraints,grants等不用再重新导. exp时候rows=y,其它 ...
- P1140 相似基因(字符串距离,递推)
题目链接: https://www.luogu.org/problemnew/show/P1140 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C, ...
- MySQL索引性能分析
为什么要做性能分析 你有没有这样的情况. 面对一个你没怎么写过的.复杂的业务,你构思了很久,终于开始敲下了第一段代码. 写的过程迷迷糊糊,有的时候还能把自己搞晕了. 但你还是终于把它写完了. 但是点击 ...
- STM32F207时钟系统解析
在前几天的文章<晶振原理解析>中介绍了晶振如何产生时钟的,板子使用的是25M无源晶振,下文将介绍STM32F207的时钟系统如何将25M晶振时钟转换为120M系统主频时钟的. 01.时钟系 ...
- JavaScript小记
JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...