今天简单分享一下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", 6379);
option.EndPoints.Add("127.0.0.1", 6380);
option.EndPoints.Add("127.0.0.1", 6381);
_redis = ConnectionMultiplexer.Connect(option);
_db = _redis.GetDatabase();
现在集群配置完了,那么主服务器挂了怎么办,这个时候就是配置哨兵的事情了。当主服务器6379挂掉,自然会有从服务器升为主服务。你依然可以正常操作所有命令。
接下来,又有一个问题出现了。如果你真的将set设置仅为主服务器,get相关都设置为从服务器。当主服务器挂了,即使你配置的哨兵将某个从升为主,但是你的代码或者你代码中的配置文件,并不知道你主从已经切换了呀!