日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2023/12/4 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StackExchange.Redis客户端读写主从配置,以及哨兵配置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天簡單分享一下StackExchange.Redis客戶端中配置主從分離以及哨兵的配置。

關(guān)于哨兵如果有不了解的朋友,可以看我之前的一篇分享,當(dāng)然主從復(fù)制文章也可以找到。http://www.cnblogs.com/tdws/tag/NoSql/

為什么要有這篇分享呢,是因為我之前也有一些疑問,相信學(xué)習(xí)Redis的朋友都有過相同的疑問。

在代碼中,如何分別操作主從數(shù)據(jù)庫?,也就是說,如何只向主數(shù)據(jù)庫寫,而讀取只向從服務(wù)器讀。我目前給出的解決方案就是有關(guān)Set命令使用主服務(wù)器地址,關(guān)于Get的命令使用多個從服務(wù)器地址

下面我沒有分別給出set和get配置不同服務(wù)器地址的代碼,給出一個集群的寫法吧。如果覺得代碼比較突兀,那還是從第一篇,基礎(chǔ)配置看一下吧。下面的配置就是個例子。

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();

現(xiàn)在集群配置完了,那么主服務(wù)器掛了怎么辦,這個時候就是配置哨兵的事情了。當(dāng)主服務(wù)器6379掛掉,自然會有從服務(wù)器升為主服務(wù)。你依然可以正常操作所有命令。

接下來,又有一個問題出現(xiàn)了。如果你真的將set設(shè)置僅為主服務(wù)器,get相關(guān)都設(shè)置為從服務(wù)器。當(dāng)主服務(wù)器掛了,即使你配置的哨兵將某個從升為主,但是你的代碼或者你代碼中的配置文件,并不知道你主從已經(jīng)切換了呀!

下面簡單給出sentinel哨兵的連接以及訂閱主從切換事件的代碼。(發(fā)布訂閱相關(guān)文章請看這里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時的靜態(tài)構(gòu)造函數(shù)中。

其中的sentinelsub是我們訂閱消息的對象。

訂閱消息的方法

public ?void SubSentinel()

? ? ? ? {

? ? ? ? ? ? sentinelsub.Subscribe("+switch-master", (channel, message) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? Console.WriteLine((string)message);

? ? ? ? ? ? });

? ? ? ? }

我們訂閱redis為我們提供的名稱為?+switch-master?的channel。

這個時候,你可以在應(yīng)用程序中的某處調(diào)用SubSentinel方法,其實就是注冊一下你訂閱了這個事件。

你可以在訂閱事件中打上斷點,然后手動關(guān)閉主服務(wù)器,主從成功由我們配置的sentinel哨兵切換后,斷點會進(jìn)來。

現(xiàn)在你看一下返回的message,其中包含了哨兵的地址和新的master服務(wù)器的地址。

下一步就是根據(jù)你所獲取的message,修改你的配置文件,或者直接修改所有set命令所使用的 主服務(wù)器地址為 message中的主服務(wù)器地址。

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

?

相關(guān)文章:

  • Redis到底該如何利用(一)?

  • Redis到底該如何利用(二)?

  • Redis 3.0.0正式版發(fā)布,高性能 K/V 服務(wù)

  • 用Docker構(gòu)建分布式Redis集群

  • 推薦–個通用緩存接口抽象類庫:CacheManager

  • asp.net core 使用 Redis 和 Protobuf 進(jìn)行 Session 緩存

  • C#使用Redis集群緩存

  • Azure Redis 緩存的 ASP.NET 會話狀態(tài)提供程序

  • 搜狐視頻Redis私有云cachecloud開源了

  • 在.Net項目中使用Redis作為緩存服務(wù)

  • Redis集群~StackExchange.redis連接Twemproxy代理服務(wù)器

  • Redis集群~StackExchange.redis連接Sentinel服務(wù)器并訂閱相關(guān)事件


原文地址:http://www.cnblogs.com/tdws/p/5836122.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的StackExchange.Redis客户端读写主从配置,以及哨兵配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。