【譯】StackExchange.Redis中文使用文檔--配置

配置

因為有很多不同配置 redis 的方式,StackExchange.Redis 提供了一個豐富的配置模型子眶,當調(diào)用 Connect (或 ConnectAsync )時調(diào)用它瀑凝。

var conn = ConnectionMultiplexer.Connect(configuration);

這里的 configuration 可以是下面的任意一個:

  • 一個 ConfigurationOptions 實例
  • 一個代表配置的 string

后者是 基本上 是前者的標記化形式。

基本配置字符串

最簡單的 配置示例只需要一個主機名:

var conn = ConnectionMultiplexer.Connect("localhost");

這將使用默認的redis端口(6379)連接到本地計算機上的單個服務器臭杰。
附加選項只是簡單地附加(逗號分隔)粤咪。 端口通常用冒號(:)表示。 配置選項在名稱后面包含一個=渴杆。 例如:

var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");

下面顯示了 stringConfigurationOptions 表示之間的映射概述寥枝,但您可以輕松地在它們之間切換:

ConfigurationOptions options = ConfigurationOptions.Parse(configString);

或者:

string configString = options.ToString();

常見的用法是將 基礎配置 細節(jié)存儲在一個字符串中,然后在運行時應用特定的詳細信息:

string configString = GetRedisConfiguration();
var options = ConfigurationOptions.Parse(configString);
options.ClientName = GetAppName(); // only known at runtime
options.AllowAdmin = true;
conn = ConnectionMultiplexer.Connect(options);

帶密碼的 Microsoft Azure Redis 示例

var conn = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,ssl=true,password=...");

配置選項

ConfigurationOptions對象具有許多的屬性磁奖,所有這些都在智能提示中都有囊拜。

一些更常用的選項包括:

配置字符串 ConfigurationOptions 含義
abortConnect={bool} AbortOnConnectFail 如果為true,Connect 沒有服務器可用時將不會創(chuàng)建連接
allowAdmin={bool} AllowAdmin 啟用被認為具有風險的一系列命令
channelPrefix={string} ChannelPrefix 所有發(fā)布/訂閱操作的可選頻道前綴
connectRetry={int} ConnectRetry 在初始 Connect 期間重復連接嘗試的次數(shù)
connectTimeout={int} ConnectTimeout 連接操作的超時時間(ms)
configChannel={string} ConfigurationChannel 用于傳達配置更改的廣播通道名稱
defaultDatabase={int} DefaultDatabase 默認數(shù)據(jù)庫索引, 從 0databases - 1(0 到 Databases.Count -1)
keepAlive={int} KeepAlive 發(fā)送消息以幫助保持套接字活動的時間(秒)
name={string} ClientName 標識 redis 中的連接
password={string} Password redis 服務器的密碼
proxy={proxy type} Proxy 正在使用的代理類型(如果有); 例如“twemproxy”
resolveDns={bool} ResolveDns 指定DNS解析應該是顯式和熱切比搭,而不是隱式
serviceName={string} ServiceName 目前尚未實施(預期與sentinel一起使用)
ssl={bool} Ssl 指定應使用SSL加密
sslHost={string} SslHost 在服務器證書上強制執(zhí)行特定的SSL主機標識
syncTimeout={int} SyncTimeout 允許同步操作的時間(ms)
tiebreaker={string} TieBreaker 用于在不明確的主場景中選擇服務器的鍵
version={string} DefaultVersion Redis版本級別(當服務器要使用的版本默認不可用時使用)
writeBuffer={int} WriteBuffer 輸出緩沖區(qū)的大小
ReconnectRetryPolicy={IReconnectRetryPolicy} ReconnectRetryPolicy 重新連接重試策略

配置字符串中的令牌是逗號分隔的;任何沒有=符號的都假定為redis服務器端點冠跷。
沒有顯式端口的端點將在未啟用ssl的情況下使用6379,如果啟用了ssl則使用6380。

$開頭的令牌被用來表示命令映射蜜托,例如:$ config = cfg抄囚。

自動和手動配置

在許多常見的情況下,StackExchange.Redis將自動配置很多設置橄务,包括服務器類型和版本幔托,連接超時和主/從關系。
有時蜂挪,在redis服務器上禁用了這些命令柑司。 在這種情況下,可以提供更多的信息:

ConfigurationOptions config = new ConfigurationOptions
{
    EndPoints =
    {
        { "redis0", 6379 },
        { "redis1", 6380 }
    },
    CommandMap = CommandMap.Create(new HashSet<string>
    { // EXCLUDE a few commands
        "INFO", "CONFIG", "CLUSTER",
        "PING", "ECHO", "CLIENT"
    }, available: false),
    KeepAlive = 180,
    DefaultVersion = new Version(2, 8, 8),
    Password = "changeme"
};

它相當于命令字符串:

redis0:6379,redis1:6380,keepAlive=180,version=2.8.8,$CLIENT=,$CLUSTER=,$CONFIG=,$ECHO=,$INFO=,$PING=

重命名命令

redis的一個很不尋常的功能是可以禁用或重命名或禁用并重命名單個命令锅劝。

根據(jù)前面的例子攒驰,這是通過CommandMap來實現(xiàn)的,但不是傳遞一個HashSet <string>Create()(表示可用或不可用的命令)故爵,而是傳遞一個Dictionary < string>玻粪。
字典中未提及的所有命令都默認已啟用且未重命名。

“null”或空白值記錄命令被禁用诬垂。 例如:

var commands = new Dictionary<string,string> {
        { "info", null }, // disabled
        { "select", "use" }, // renamed to SQL equivalent for some reason
};
var options = new ConfigurationOptions {
    // ...
    CommandMap = CommandMap.Create(commands),
    // ...
}

以上代碼等同于(在連接字符串中):

$INFO=,$SELECT=use

Twemproxy

Twemproxy 是允許使用多個 redis 實例就像它是一個單個服務器劲室,具有內(nèi)置分片和容錯(很像 redis 集群,但單獨實現(xiàn))的工具结窘。
Twemproxy可用的功能集減少很洋。
為了避免手動配置,可以使用 Proxy 選項:

var options = new ConfigurationOptions
{
    EndPoints = { "my-server" },
    Proxy = Proxy.Twemproxy
};

Tiebreakers 和配置更改公告

通常 StackExchange.Redis 都會自動解析 主/從節(jié)點隧枫。然而喉磁,如果你不使用諸如 redis-sentinel 或 redis 集群之類的管理工具,有時你會有多個主節(jié)點(例如官脓,在重置節(jié)點以進行維護時协怒,它可能會作為主節(jié)點重新顯示在網(wǎng)絡上)。
為了幫助解決這個問題卑笨,StackExchange.Redis 可以使用 tie-breaker 的概念 - 這僅在檢測到多個主節(jié)點時使用(不包括需要多個主節(jié)點的redis集群)孕暇。
為了與 BookSleeve 兼容,tiebreaker 使用默認的key為 "__Booksleeve_TieBreak" (總是在數(shù)據(jù)庫0中)赤兴。
這用作粗略的投票機制妖滔,以幫助確定首選 主機,以便能夠按正確的路由工作桶良。

同樣座舍,當配置改變時(特別是主/從配置),連接的實例使得他們意識到新的情況(在可用的地方通過 INFO艺普,CONFIG 等進行通知 )是很重要的簸州。
StackExchange.Redis 通過自動訂閱可以在其上發(fā)送這樣的通知的發(fā)布/訂閱通道來實現(xiàn)。
由于類似的原因歧譬,這默認為"__Booksleeve_MasterChanged"岸浑。

這兩個選項都可以通過 .ConfigurationChannel.TieBreaker 配置屬性來定制或禁用(設置為"")。

These settings are also used by the IServer.MakeMaster() method, which can set the tie-breaker in the database and broadcast the configuration change message.
The configuration message can also be used separately to master/slave changes simply to request all nodes to refresh their configurations, via the ConnectionMultiplexer.PublishReconfigure method.

這些設置也由 IServer.MakeMaster() 方法使用瑰步,它可以設置數(shù)據(jù)庫中的 tie-breaker 并廣播配置更改消息矢洲。
配置消息也可以單獨用于主/從變化,只需通過調(diào)用 ConnectionMultiplexer.PublishReconfigure 方法請求所有節(jié)點刷新其配置缩焦。

重新連接重試策略

當連接由于任何原因丟失時读虏,StackExchange.Redis會自動嘗試在后臺重新連接。
它將繼續(xù)重試袁滥,直到連接恢復盖桥。 它將使用 ReconnectRetryPolicy 來決定在重試之間應該等待多長時間。
ReconnectRetryPolicy可以是線性的(默認)题翻,指數(shù)的或者是一個自定義的重試策略揩徊。

舉個例子:

config.ReconnectRetryPolicy = new ExponentialRetry(5000); // defaults maxDeltaBackoff to 10000 ms
//retry#    retry to re-connect after time in milliseconds
//1         a random value between 5000 and 5500       
//2         a random value between 5000 and 6050       
//3         a random value between 5000 and 6655       
//4         a random value between 5000 and 8053
//5         a random value between 5000 and 10000, since maxDeltaBackoff was 10000 ms
//6         a random value between 5000 and 10000

config.ReconnectRetryPolicy = new LinearRetry(5000); 
//retry#    retry to re-connect after time in milliseconds
//1         5000 
//2         5000       
//3         5000       
//4         5000 
//5         5000 
//6         5000 

查看原文

More

作者水平有限,若有疏漏或錯誤還望提醒嵌赠,十分感謝塑荒。

您可以在這里 提出問題

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姜挺,一起剝皮案震驚了整個濱河市齿税,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炊豪,老刑警劉巖凌箕,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異词渤,居然都是意外死亡陌知,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門掖肋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仆葡,“玉大人,你說我怎么就攤上這事志笼⊙刂眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵纫溃,是天一觀的道長腰涧。 經(jīng)常有香客問我,道長紊浩,這世上最難降的妖魔是什么窖铡? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任疗锐,我火速辦了婚禮,結果婚禮上费彼,老公的妹妹穿的比我還像新娘滑臊。我一直安慰自己,他們只是感情好箍铲,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布雇卷。 她就那樣靜靜地躺著,像睡著了一般颠猴。 火紅的嫁衣襯著肌膚如雪关划。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天翘瓮,我揣著相機與錄音贮折,去河邊找鬼。 笑死资盅,一個胖子當著我的面吹牛脱货,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播律姨,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼振峻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了择份?” 一聲冷哼從身側響起扣孟,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荣赶,沒想到半個月后凤价,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡拔创,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年利诺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剩燥。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡慢逾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灭红,到底是詐尸還是另有隱情侣滩,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布变擒,位于F島的核電站君珠,受9級特大地震影響,放射性物質發(fā)生泄漏娇斑。R本人自食惡果不足惜策添,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一材部、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唯竹,春花似錦乐导、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芬骄。三九已至猾愿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間账阻,已是汗流浹背蒂秘。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淘太,地道東北人姻僧。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蒲牧,于是被迫代替她去往敵國和親撇贺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理冰抢,服務發(fā)現(xiàn)松嘶,斷路器,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • 轉載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,452評論 0 82
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評論 6 342
  • 對專業(yè)的認識 關于財務管理這個專業(yè)挎扰,我了解甚少翠订,通過對這個表格的查找,我對我的專業(yè)了解了不少遵倦。 財務管理是在一...
    財一田園閱讀 226評論 0 0
  • 匆忙入夢 又輾轉驚醒 夢里門外是海 我是海上濃烈的風 漁人是你尽超,在船顛簸 荒蕪寰宇 縱灑下一網(wǎng)柔情 是云是霧是蒼白...
    西盡閱讀 241評論 3 6