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中的主服務器地址。

從而你的讀寫操作都不會受到影響或者掛掉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM