一、创建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 的哨兵和主从复制的更多相关文章

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

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

  2. jedis访问redis学习笔记

    最近在学习redis,在网上查了些文章,利用他人已有的知识,总结写下了这篇文章,大部分内容还是引用别人的文章内容.经过测试发现spring-data-redis现在有的版本只能支持reids 2.6和 ...

  3. python访问redis

    python访问redis 1 Linux上安装redis a) 下载 $ wget http://download.redis.io/releases/redis-3.0.5.tar.gz b) 编 ...

  4. Redis Sentinel哨兵配置

    概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...

  5. Springboot2.0访问Redis集群

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作高性能的key-value数据库.缓存和消息中间件,掌握它是程序员的必备技能,下面是一个springboot访问redis的 ...

  6. 【Redis】哨兵机制

    一.概述 什么是哨兵机制 二.环境配置 2.1 虚拟机 2.2 安装Redis 2.3 配置主从复制 2.4 配置哨兵 2.5 测试 2.6 疑惑(待解决) 一.概述 什么是哨兵机制 Redis的哨兵 ...

  7. .Net Core使用分布式缓存Redis:基础

    一.前言 Redis的介绍网上很多不再赘述.本次环境为net core 2.2,使用的StackExchange.Redis来操作Redis. 二.引用Microsoft.Extensions.Cac ...

  8. ASP.Net Core使用分布式缓存Redis从入门到实战演练

    一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.  所以经常要用到且不会频繁改变且被用户共享的 ...

  9. redis主从+ 哨兵模式(sentinel)+漂移VIP实现高可用系统

    原文:https://www.jianshu.com/p/c2ab606b00b7 客户端程序 客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时, ...

随机推荐

  1. 2021升级版微服务教程3—Eureka完全使用指南

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 默认文件1610014380163 教程全目录「含视 ...

  2. Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG

    WPF的BUG!弹出框的 自定义控件里有Popup, Popup里面放一个ListBox 在ListBox中的SelectionChange事件触发关闭弹出框后,主窗体存在一定概率卡死(但点击标题又能 ...

  3. WPF 关于拖拽打开文件的注意事项

    由于开发需求,需要开发一个类似Win图片浏览的工具 当然也涉及到了拖拽打开的需求 按照固有思路: <Grid x:Name="grid1" AllowDrop="T ...

  4. openstack octavia的实现与分析(二)原理,架构与基本流程

    [了解] 其实说白了,Octavia就是将用户的API请求经过逻辑处理,转换成Haproxy或者Nginx的配置参数,下发到amphora虚机中. Octavia的内部实现中,逻辑流程的处理主要使用T ...

  5. LeetCode-151-中等-翻转字符串里面的单词

    问题描述 给定一个字符串,逐个翻转字符串中的每个单词. 说明: 无空格字符构成一个 单词 . 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括. 如果两个单词间有多余的空格,将反转 ...

  6. 【EXP/IMP】问题总结

    为了使测试与生产数据保持一致,只需要导出数据的时候,可以将测试库的表truncate,保留其它如索引,trigger,constraints,grants等不用再重新导. exp时候rows=y,其它 ...

  7. P1140 相似基因(字符串距离,递推)

    题目链接: https://www.luogu.org/problemnew/show/P1140 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C, ...

  8. MySQL索引性能分析

    为什么要做性能分析 你有没有这样的情况. 面对一个你没怎么写过的.复杂的业务,你构思了很久,终于开始敲下了第一段代码. 写的过程迷迷糊糊,有的时候还能把自己搞晕了. 但你还是终于把它写完了. 但是点击 ...

  9. STM32F207时钟系统解析

    在前几天的文章<晶振原理解析>中介绍了晶振如何产生时钟的,板子使用的是25M无源晶振,下文将介绍STM32F207的时钟系统如何将25M晶振时钟转换为120M系统主频时钟的. 01.时钟系 ...

  10. JavaScript小记

    JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...