StackExchange.Redis官方文檔(二)【配置】

來源:互聯網
上載者:User
配置

配置Redis有很多不同的方式,StackExchange.Redis提供了一個豐富的配置模型,我們可在調用 Connect 或者 ConnectAsync 方法時傳入配置:

var conn = ConnectionMultiplexer.Connect(configuration);

在這裡參數configure可以是: ConfigurationOptions 執行個體配置 字串方式配置

後面一種也是前面一種的標記形式。 基本配置 - 通過字串配置

最簡單的配置執行個體就是以主機名稱來配置:

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

最常用的方式是將基本資料儲存在一個字串中,然後在運行時應用這個特定的基本資料:

string configString = GetRedisConfiguration();var options = ConfigurationOptions.Parse(configString);options.ClientName = GetAppName(); // 僅僅在運行時才知道options.AllowAdmin = true;conn = ConnectionMultiplexer.Connect(options);

在微軟Azure上使用Redis並附上密碼的例子:

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

ConfigurationOptions 對象具有很多屬性,所有選項的說明都已在智能提示裡面。下面表格是一些最常用的選項描述:

Configuration string ConfigurationOptions 描述
abortConnect={bool} AbortOnConnectFail 如果是 true,當沒有可用的伺服器時 Connect 不會建立串連
allowAdmin={bool} AllowAdmin 如果是 true,開啟一些被認為是有風險的命令
channelPrefix={string} ChannelPrefix 所有 pub/sub 操作的可選通道首碼
connectRetry={int} ConnectRetry 在初始化 Connect 時,串連重試次數
connectTimeout={int} ConnectTimeout 連線逾時設定,時間單位是ms
configChannel={string} ConfigurationChannel 設定廣播通道名稱
defaultDatabase={int} DefaultDatabase 預設資料庫索引, 從 0databases - 1
keepAlive={int} KeepAlive 如果在指定時間(seconds)內沒有活動,那麼發送一條資訊來協助socket保持串連
name={string} ClientName 唯一名稱,用來識別Redis裡面的串連
password={string} Password Redis伺服器密碼
proxy={proxy type} Proxy 使用的代理類型 (如果有的話); 例如 “twemproxy”
resolveDns={bool} ResolveDns 指定DNS解析方式是顯示而不是隱式
serviceName={string} ServiceName 當前沒有實現
ssl={bool} Ssl 指定使用SSL加密
sslHost={string} SslHost 強制SSL主機識別,需要使用伺服器端認證
syncTimeout={int} SyncTimeout 非同步逾時設定(ms)
tiebreaker={string} TieBreaker 主要是在一個模糊不清的主機之間選擇出一個作為主伺服器
version={string} DefaultVersion Redis 版本層級 (該選項是非常有用的,當伺服器不可用時)
writeBuffer={int} WriteBuffer 輸出緩衝區的大小

在配置字串中的標記都是以逗號分隔的;任何沒有 = 符號的都被假定為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>    { // 排除幾個命令        "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中有些不常用的功能,那就是你能禁用或者重新命名單個命令。正如前面的所展示的,這是通過 CommandMap 來實現的,而不是通過 HashSet\

var commands = new Dictionary<string,string> {        { "info", null }, // 禁用        { "select", "use" }, // 由於某種原因重新命名為等效的SQL};var options = new ConfigurationOptions {    // ...    CommandMap = CommandMap.Create(commands),    // ...}

上面的配置等同於下面的字串配置(在連接字串中):

$INFO=,$SELECT=use
Twemproxy

Twemproxy是一個允許多個Redis執行個體使用起來像是單個服務一樣的工具,它內建分區和容錯能力(這很像Redis叢集,但是它是單獨實現的)。Twemproxy簡化了功能設定的可用性。為了避免手動設定,Proxy 選項可以這樣配置:

var options = new ConfigurationOptions{    EndPoints = { "my-server" },    Proxy = Proxy.Twemproxy};
打破僵局(Tiebreakers或者權衡決策)和配置更改公告

通常StackExchange.Redis會自動的解決主/從節點問題。然而可能你沒有使用像 Redis叢集Redis-Sentinel 那樣的管理工具,你可能會碰到這樣的一個場合:同時具有多個主節點(例如:當我們以維護為目的而重新設定一個節點時,它可能作為一個主節點重新出現在網路上)。為瞭解決這個問題,StackExchange.Redis可以用打破僵局(權衡決策)這一概念,這個僅適用於多個主機被發現的情況。為了相容 BookSleeve,預設鍵名是 “__Booksleeve_TieBreak”(一直是在索引為0的資料庫中)。這用來作為一個簡單的投票機制,協助決策那個是首選主節點,使之以正確路由工作。

同樣的,當配置發生更改的時候(尤其是在主/從配置的時候),這對於串連執行個體來說將是非常重要的,這可以使它們自己意識到有新的情況發生(通過 IFNO,CONFIG 等等)。StackExchange.Redis通過自動訂閱來 pub/sub 發送這樣的通知。由於類似的原因,預設是鍵名是 “__Booksleeve_MasterChanged”

這兩個選項可以被自訂或者禁用(設定為”“),可以通過 .ConfigurationChannel.TieBreaker 來配置屬性。

這些設定也可以通過 IServer.MakeMaster() 來配置,可以在資料庫中設定打破僵局(tie-breaker)和廣播配置更改的訊息。通過 ConnectionMultiplexer.PublishReconfigure 方法,配置訊息也可以單獨使用主/從更新來請求所有的節點重新整理它們的配置。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.