本篇分享有部分瑕疵 请移步修正 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. C#多线程之线程同步篇1

    在多线程(线程同步)中,我们将学习多线程中操作共享资源的技术,学习到的知识点如下所示: 执行基本的原子操作 使用Mutex构造 使用SemaphoreSlim构造 使用AutoResetEvent构造 ...

  2. 算法与数据结构(十四) 堆排序 (Swift 3.0版)

    上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...

  3. css3线条围绕跑马+jquery打字机效果

    原文地址:css3线条围绕跑马+jquery打字机效果 有图有真相,今天偶然看到了一种效果,仔细看了下,发现它是用css的clip+css3的动画实现的,简直叼.于是自己拿来了前一阵子写的打字机效果, ...

  4. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  5. Dynamics CRM 之ADFS 使用 WID 的独立联合服务器

    ADFS 的使用 WID 的独立联合服务器适用于自己的测试环境,常用的就是在虚机中使用. 拓扑图如下: wID:联合身份验证服务配置为使用 Windows 内部数据库

  6. 【初探Spring】------Spring IOC(一)

    IOC:Inversion of Control(控制反转).IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想.IOC的核心思想就体现在控制.反转这两个词上面,要理 ...

  7. ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

  8. tomcat RMI 停不掉

    项目采用jfinal框架,做了一个RMI的服务,对其它程序提供服务.实现上,写了一个RmiPlugin package com.wisdombud.cloudtalk.plugin; import j ...

  9. Tree树节点选中及取消和指定节点的隐藏

    指定节点变色 指定节点隐藏 单击节点 未选中则选中该节点 已选中则取消该节点 前台: 1.HTML <ul id="listDept" name="listDept ...

  10. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...