博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# redis笔记
阅读量:5768 次
发布时间:2019-06-18

本文共 1705 字,大约阅读时间需要 5 分钟。

  hot3.png

如果部署哨兵模式,使用c#代码连接到哨兵集群,获取相关信息。有非常小的几率出现2个master的情况。

            try

            {
                string[] connArry = ConnectionString.Split(';');
                string[] ips = connArry[0].Split(',');
                ConfigurationOptions option = new ConfigurationOptions();
                option.ServiceName = connArry[2].Replace("servername=", "");
                foreach (string item in ips)
                    option.EndPoints.Add(item);
                //这行在sentinel模式必须加上
                option.TieBreaker = "";
                option.CommandMap = CommandMap.Sentinel;
                //连接上去
                ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(option);
                //然后得到相应服务器
                SortedList<string, int> masters = new SortedList<string, int>();
                foreach (string item in ips)
                {
                    //循环所有的哨兵服务器,然后得到master地址,放在一个list
                    IServer server = conn.GetServer(item);
                    EndPoint temp = server.SentinelGetMasterAddressByName("master");
                    //判断存在则次数+1
                    if (masters.Count(m => m.Key == temp.ToString()) > 0)
                    {
                        KeyValuePair<string, int> data = masters.Where(m => m.Key == temp.ToString()).Single();
                        masters.Remove(data.Key);
                        masters.Add(data.Key, data.Value + 1);
                    }
                    else
                    {
                        masters.Add(temp.ToString(), 1);
                    }
                }
                //拿到哨兵中master ip最多的master
                KeyValuePair<string, int> master = masters.OrderBy(m => m.Value).Single();
                //然后正式开始连接上master
                _connMultiplexer = ConnectionMultiplexer.Connect(string.Format("{0},{1}", master.Key, connArry[1]));
                _db = _connMultiplexer.GetDatabase(CommonHelper.RedisDB);
                Console.WriteLine("Initialize Redis Connetion Success...");
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Initialize Redis Connetion Failure:" + ex.Message);
                LogHelper.Error(ex);
                return false;
            }

 

部署redis集群后,StackExchange.Redis可以自动识别主库,所以不需要自己去获取主库地址,如果使用单例连接,那么出现连接异常,只需要拦截下来进行重试几次即可,我这里基于polly做了一个重试机制,当然你也可以写for循环来实现重试也没有什么不可以的。

代码地址:https://gitee.com/awith/RedisHelper.git

 

 

转载于:https://my.oschina.net/uwith/blog/1862838

你可能感兴趣的文章
A Knight's Journey (DFS)
查看>>
Notepad++ xml/json格式化
查看>>
检查SSD磁盘是否开启了TRIM指令
查看>>
详解KMP算法 另一种思路
查看>>
hdu 2059 DP
查看>>
jquery如何判断checkbox(复选框)是否被选中 全选 反选
查看>>
oracle toda和pl/sql匪夷所思的差异
查看>>
在fedora14中合并pdf文件
查看>>
伙伴系统-Buddy System
查看>>
c#基础知识 属性和索引
查看>>
12.6作业
查看>>
CodeChef Mahesh and his lost array
查看>>
集合 (set)
查看>>
iOS开发-UIWebView加载本地和网络数据
查看>>
hdu 1042 N!
查看>>
Spring的@Value获取不到值的问题
查看>>
匿名函数
查看>>
JS基础学习笔记一 -- 从Hello Word输出开始
查看>>
修改Ubuntu的aptget源为阿里源的方法
查看>>
Ubuntu启用root账号登录系统
查看>>