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

歡迎訪問 生活随笔!

生活随笔

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

数据库

StackExchange.Redis 官方文档(二) Configuration

發(fā)布時(shí)間:2024/4/17 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StackExchange.Redis 官方文档(二) Configuration 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

配置

有多種方式可以配置redis,StackExchange.Redis提供了一個(gè)豐富的配置模型,在執(zhí)行Connect (or ConnectAsync) 時(shí)被調(diào)用:

var conn = ConnectionMultiplexer.Connect(configuration);

這里的 configuration 可以是一下類型當(dāng)中的任意一項(xiàng):

  • 一個(gè)ConfigurationOptions 實(shí)例
  • 一個(gè)包含配置數(shù)據(jù)的字符串

后者基本上是前者的字符串形式

基本的配置字符串

最簡(jiǎn)單 的例子就是只包含主機(jī)的名稱:

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

這樣就會(huì)鏈接到部署在本地機(jī)器上使用默認(rèn)端口(6379)的單服務(wù)器。其余的配置選項(xiàng)只需要拼接在后面(要用逗號(hào)分隔).端口之前通常使用分號(hào)(:)分隔。配置 選項(xiàng) 在名稱后邊有一個(gè)=。示例:

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

string和ConfigurationOptions之間的映射在下面有詳細(xì)的概述,你可以通過如下的方式對(duì)兩者進(jìn)行互相轉(zhuǎn)換:

ConfigurationOptions options = ConfigurationOptions.Parse(configString);

or:

string configString = options.ToString();

常用的方式將基本的配置保存在字符串當(dāng)中,但運(yùn)行的時(shí)候應(yīng)用特殊的配置:

string configString = GetRedisConfiguration(); var options = ConfigurationOptions.Parse(configString); options.ClientName = GetAppName(); // 只能在運(yùn)行狀態(tài)下才能獲取到 options.AllowAdmin = true; conn = ConnectionMultiplexer.Connect(options);

帶有密碼的 Microsoft Azure Redis 實(shí)例:

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

配置選項(xiàng)

ConfigurationOptions對(duì)象有很多屬性,轉(zhuǎn)換時(shí)會(huì)自動(dòng)判斷。下面是一些常用的配置:

Configuration stringConfigurationOptionsMeaning
abortConnect={bool}AbortOnConnectFail如果是true,Connect方法在鏈接不到有效的服務(wù)器的時(shí)候不會(huì)創(chuàng)建一個(gè)鏈接實(shí)例
allowAdmin={bool}AllowAdmin啟用被認(rèn)定為是有風(fēng)險(xiǎn)的一些命令
channelPrefix={string}ChannelPrefix所有的發(fā)布訂閱頻道的前綴
connectRetry={int}ConnectRetry在初始化 Connect 失敗的時(shí)候重新嘗試進(jìn)行鏈接的次數(shù)
connectTimeout={int}ConnectTimeout鏈接超時(shí)時(shí)間(ms)
configChannel={string}ConfigurationChannel用于傳遞配置改變信息的廣播頻道
defaultDatabase={int}DefaultDatabase默認(rèn)的數(shù)據(jù)庫(kù)序數(shù),從1到-1
keepAlive={int}KeepAlive發(fā)送信息以保持sockets在線的間隔時(shí)間
name={string}ClientName在redis內(nèi)用于判別不同鏈接客戶端
password={string}Password密碼
proxy={proxy type}Proxy代理類型(如果有的話); 如 "twemproxy"
resolveDns={bool}ResolveDns指定DNS解析服務(wù)器, 推薦明確指出,而不是采用默認(rèn)的
serviceName={string}ServiceName當(dāng)前沒有實(shí)現(xiàn)(用于sentinel模式)
ssl={bool}Ssl使用SSL加密
sslHost={string}SslHost在服務(wù)器證書上注冊(cè)SSL主機(jī)身份標(biāo)識(shí)
syncTimeout={int}SyncTimeout同步操作的超時(shí)時(shí)間(ms)
tiebreaker={string}TieBreaker多主機(jī)服務(wù)器部署情形下中用于選擇出master服務(wù)的Key
version={string}DefaultVersionRedis版本(用于從服務(wù)器獲取不到此信息時(shí))
writeBuffer={int}WriteBuffer輸出緩存大小

配置字符串的Token是用逗號(hào)分隔開的;任何沒有 = 符號(hào)的Token都會(huì)被認(rèn)為是一個(gè)服務(wù)器節(jié)點(diǎn)。節(jié)點(diǎn)信息如果沒有指出端口號(hào)在沒有使用ssl的情況下會(huì)默認(rèn)為6379,啟用了ssl則默認(rèn)使用6380。
Token當(dāng)中如果是以$開頭則表示是命令映射信息,例如:$config=cfg。

自動(dòng)配置和手動(dòng)配置

在通常的方案當(dāng)中,StackExchange.Redis 會(huì)自動(dòng)配置很多設(shè)置,包括服務(wù)器類型和版本,鏈接超時(shí)時(shí)間,以及主從關(guān)系。但是,有時(shí)候這些命令會(huì)被redis服務(wù)器無效化,這種情況下,提供這些信息是很有必要的:

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里有一個(gè)不常用的功能,就是禁用或者重命名個(gè)別的命令。在這之前的每一個(gè)例子,這個(gè)功能是通過CommandMap操作的,但是它并沒有采用傳參數(shù)HashSet<string>或者 Create()的形式(去明確指出哪些命令可用哪些命令不可用),而是采用 Dictionary<string,string>的形式。這個(gè)字典當(dāng)中包含的所有的命令都被假定為啟用,而且并沒有被重命名。 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是一個(gè)可以把多個(gè)服務(wù)器當(dāng)成一個(gè)服務(wù)器的工具,帶有分享和容錯(cuò)能力(這和redis cluster很相似,但是實(shí)現(xiàn)方式不同)。Twemproxy可以使用的功能是簡(jiǎn)化過的。為了避免手動(dòng)配置,可以使用Proxy配置項(xiàng):

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

Tiebreakers和配置更改公告

正常情況下StackExchange.Redis會(huì)自動(dòng)判別主從節(jié)點(diǎn)。但是,如果你沒有使用類似于redis-sentinel或者redis cluster的管理工具,你可能會(huì)碰到有多個(gè)master節(jié)點(diǎn)的情況(例如,維護(hù)時(shí)重置了節(jié)點(diǎn),在網(wǎng)絡(luò)中在就表現(xiàn)為是一個(gè)master)。為了解決這種情況,StackExchange.Redis使用了tie-breaker的概念 - 他只有在檢測(cè)到多個(gè)master的時(shí)候才會(huì)用到。(不包括redis cluster的情況下,因?yàn)閞edis cluster是正是需要多個(gè)master的)。為了兼容BookSleeve,默認(rèn)的key是"__Booksleeve_TieBreak"(只存在于0號(hào)數(shù)據(jù)庫(kù))。他是一種原始的投票機(jī)制去判斷更適用的master。(so that work is routed correctly.)

類似的,當(dāng)配置發(fā)生改變時(shí)(特別是master/slave配置),讓已經(jīng)鏈接的實(shí)例知道新的環(huán)境(通過INFO, CONFIG等可以使用的命令)是很重要的。StackExchagnge.Redist通過自動(dòng)訂閱一個(gè)pub/sub頻道,這個(gè)頻道是用來發(fā)送這些通知的。為了兼容BookSleeve,頻道名名稱默認(rèn)是 "__Booksleeve_MasterChanged"。

這兩個(gè)選項(xiàng)都是可以通過.ConfigurationChannel和.TieBreaker配置屬性自定義或者禁用的(設(shè)置為"")。

這些設(shè)置也可以被IServer.MakeMaster()方法使用,來設(shè)置數(shù)據(jù)庫(kù)里的tie-breaker以及廣播配置更改消息。對(duì)于master/slave變化的配置信息也可以通過 ConnectionMultiplexer.PublishReconfigure 方法來請(qǐng)求所有節(jié)點(diǎn)刷新配置。

原文地址:StackExchange.Redis
大部分為意譯,如有不當(dāng)還請(qǐng)指正

轉(zhuǎn)載于:https://www.cnblogs.com/ArvinZhao/p/6007043.html

總結(jié)

以上是生活随笔為你收集整理的StackExchange.Redis 官方文档(二) Configuration的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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