usercount

StackExchange.Redis客户端读写主从配置,以及哨兵配置。

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

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

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

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

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

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

1     ConfigurationOptions option = new ConfigurationOptions();
2             option.EndPoints.Add("127.0.0.1", 6379);
3             option.EndPoints.Add("127.0.0.1", 6380);
4             option.EndPoints.Add("127.0.0.1", 6381);
5              _redis = ConnectionMultiplexer.Connect(option);
6             _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", 5000);
            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中的主服务器地址。

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

 

posted @   坦荡  阅读(8631)  评论(22编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示