本篇分享有部分瑕疵 请移步修正 http://www.cnblogs.com/tdws/p/6341494.html

今天简单分享一下StackExchange.Redis客户端中配置主从分离以及哨兵的配置。

关于哨兵如果有不了解的朋友,可以看我之前的一篇分享,当然主从复制文章也可以找到。http://www.cnblogs.com/tdws/tag/NoSql/

为什么要有这篇分享呢,是因为我之前也有一些疑问,相信学习Redis的朋友都有过相同的疑问。

在代码中,如何分别操作主从数据库?,也就是说,如何只向主数据库写,而读取只向从服务器读。我目前给出的解决方案就是有关Set命令使用主服务器地址,关于Get的命令使用多个从服务器地址。

下面我没有分别给出set和get配置不同服务器地址的代码,给出一个集群的写法吧。如果觉得代码比较突兀,那还是从第一篇,基础配置看一下吧。下面的配置就是个例子。

     ConfigurationOptions option = new ConfigurationOptions();
option.EndPoints.Add("127.0.0.1", );
option.EndPoints.Add("127.0.0.1", );
option.EndPoints.Add("127.0.0.1", );
_redis = ConnectionMultiplexer.Connect(option);
_db = _redis.GetDatabase();

现在集群配置完了,那么主服务器挂了怎么办,这个时候就是配置哨兵的事情了。当主服务器6379挂掉,自然会有从服务器升为主服务。你依然可以正常操作所有命令。

接下来,又有一个问题出现了。如果你真的将set设置仅为主服务器,get相关都设置为从服务器。当主服务器挂了,即使你配置的哨兵将某个从升为主,但是你的代码或者你代码中的配置文件,并不知道你主从已经切换了呀!

下面简单给出sentinel哨兵的连接以及订阅主从切换事件的代码。(发布订阅相关文章请看这里http://www.cnblogs.com/tdws/p/5827704.html

 private static readonly ConnectionMultiplexer _sentinel;
static ISubscriber sub;
static ISubscriber sentinelsub; ConfigurationOptions sentineloption = new ConfigurationOptions();
sentineloption.TieBreaker = "";//sentinel模式一定要写
sentineloption.EndPoints.Add("127.0.0.1", );
sentineloption.CommandMap = CommandMap.Sentinel;
sentineloption.ServiceName = "mymaster";
_sentinel = ConnectionMultiplexer.Connect(sentineloption);
option.CommandMap = CommandMap.Sentinel;
sentinelsub= _sentinel.GetSubscriber();

注意这段sentinel配置代码 同样放在(追加上就行)我们初始化_redis时的静态构造函数中。

其中的sentinelsub是我们订阅消息的对象。

订阅消息的方法

  public  void SubSentinel()
{
sentinelsub.Subscribe("+switch-master", (channel, message) =>
{ Console.WriteLine((string)message);
});
}

我们订阅redis为我们提供的名称为 +switch-master 的channel。

这个时候,你可以在应用程序中的某处调用SubSentinel方法,其实就是注册一下你订阅了这个事件。

你可以在订阅事件中打上断点,然后手动关闭主服务器,主从成功由我们配置的sentinel哨兵切换后,断点会进来。

现在你看一下返回的message,其中包含了哨兵的地址和新的master服务器的地址。

下一步就是根据你所获取的message,修改你的配置文件,或者直接修改所有set命令所使用的 主服务器地址为 message中的主服务器地址。

从而你的读写操作都不会受到影响或者挂掉。

StackExchange.Redis客户端读写主从配置,以及哨兵配置。的更多相关文章

  1. 使用StackExchange.Redis客户端进行Redis访问出现的Timeout异常排查

    问题产生 这两天业务系统在redis的使用过程中,当并行客户端数量达到200+之后,产生了大量timeout异常,典型的异常信息如下: Timeout performing HVALS Parser2 ...

  2. Linux下的redis的持久化,主从同步及哨兵

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失, 为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久 ...

  3. StackExchange.Redis学习笔记(三) 数据库及密码配置 GetServer函数

    这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...

  4. Linux07 /redis的配置、五大数据类型、发布订阅、持久化、主从复制、哨兵配置、集群搭建

    Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 目录 Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 ...

  5. .Net Core 三大Redis客户端对比和使用心得

    前言 稍微复杂一点的互联网项目,技术选型都可能会涉及Redis,.NetCore的生态越发完善,支持.NetCore的Redis客户端越来越多, 下面三款常见的Redis客户端,相信大家平时或多或少用 ...

  6. springboot 集成Redis一主二从三哨兵

    1.Centos7 Redis一主二从三哨兵配置 Redis一主二从三哨兵环境搭建 2.接入过程 与集成redis单机不同的是jedis相关的配置做了修改,JedisPool换成了JedisSenti ...

  7. StackExchange Redis如何实现BRPOP/BLPOP

    今天在使用StackExchange Redis客户端时.我想要使用BRPOP,但是我发现StackExchange Redis并没有提供API,没办法只好找资料看文档了. 原来StackExchan ...

  8. Redis主从配置,哨兵,集群的设计原理

    一 前言 谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. 哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转 ...

  9. spring集成redis——主从配置以及哨兵监控

    Redis主从模式配置: Redis的主从模式配置是非常简单的,首先我们需要有2个可运行的redis环境: master node : 192.168.56.101 8887 slave node: ...

随机推荐

  1. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  2. Hawk 4.6 并行化

    并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板 ...

  3. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  4. 我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)

    前言 你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和前端进行接口对接?那么这篇文章应该可以帮到你.本文将介绍创建Web Api 帮助文档页面的两种方式,Microsoft Help ...

  5. jdb调试scala代码的简单介绍

    在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...

  6. SAP CRM 用户界面对象类型和设计对象

    在CRM中的用户界面对象类型的帮助下,我们可以做这些工作: 进行不同的视图配置 创建动态导航 从设计层控制字段标签.值帮助 控制BOL对象的属性的可视性 从导航栏访问自定义组件 一个用户界面对象类型之 ...

  7. 【MySql】查询数据库中所有表及列的信息

    SELECT TABLE_NAME, -- 表名 COLUMN_NAME, -- 字段名 DATA_TYPE, -- 字段类型 COLUMN_COMMENT -- 字段注释 FROM INFORMAT ...

  8. Linux下高cpu解决方案

    昨天搞定了一个十万火急的issue,客户抱怨产品升级后系统会变慢和CPU使用率相当高,客户脾气很大,声称不尽快解决这个问题就退货,弄得我们 R&D压力很大,解决这个issue的任务分给了我,客 ...

  9. 将css和js缓存到localStorage缓存,提高网页响应速度

    适用于小站点,这很极致,很快速~~ /** * Created by SevenNight on 2016/9/21 0021. * 插件功能:使用localStorage缓存js和css文件,减少h ...

  10. 为支持ASP.NET5跨平台,Jexus再添新举措

    Jexus作为一款运行于Linux/FreeBSD平台上,以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的 ...