標籤:
Configuration
redis有很多不同的方法來配置連接字串 , StackExchange.Redis 提供了一個豐富的配置模型,當調用Connect 或者 ConnectAsync 時需要傳入。
var conn = ConnectionMultiplexer.Connect(configuration);
這裡的 configuration 參數可以是:
1. 一個 ConfigurationOptions 執行個體
2. 一個字串
第二種方式從根本上來說也是ConfigurationOptions。
通過字串配置串連
最簡單的配置方式只需要一個主機名稱
var conn = ConnectionMultiplexer.Connect("localhost");
它將會串連到本地的redis伺服器 , 預設6379連接埠 ,多個串連通過逗號分割 。 其他選項在名稱的後麵包含了一個 “= ”。 例如
var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");
可以將一個字串轉換為ConfigurationOptions 或者 將一個ConfigurationOptions轉換為字串 。
ConfigurationOptions options = ConfigurationOptions.Parse(configString);
OR
string configString = options.ToString();
推薦的用法是將基礎資訊儲存在一個字串中,然後在運行是通過ConfigurationOptions改變其他資訊。
string configString = GetRedisConfiguration();
var options = ConfigurationOptions.Parse(configString);
options.ClientName = GetAppName(); // only known at runtime
options.AllowAdmin = true;
conn = ConnectionMultiplexer.Connect(options);
也可以指定密碼
var conn = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,ssl=true,password=...");
配置選項
ConfigurationOptions 包含大量的配置選項,一些常用的配置如下:
abortConnect : 當為true時,當沒有可用的伺服器時則不會建立一個串連
allowAdmin : 當為true時 ,可以使用一些被認為危險的命令
channelPrefix:所有pub/sub渠道的首碼
connectRetry :重試串連的次數
connectTimeout:逾時時間
configChannel: Broadcast channel name for communicating configuration changes
defaultDatabase : 預設0到-1
keepAlive : 儲存x秒的活動串連
name:ClientName
password:password
proxy:代理 比如 twemproxy
resolveDns : 指定dns解析
serviceName : Not currently implemented (intended for use with sentinel)
ssl={bool} : 使用sll加密
sslHost={string} : 強制服務器使用特定的ssl標識
syncTimeout={int} : 非同步逾時時間
tiebreaker={string}:Key to use for selecting a server in an ambiguous master scenario
version={string} : Redis version level (useful when the server does not make this available)
writeBuffer={int} : 輸出緩衝區的大小
各配置項用逗號分割
自動和手動設定
在大部分的情況下StackExchange.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=
重新命名命令
你可以禁用或者重新命名一個命令。 按照前面的樣本這是通過 CommandMap 來完成的,不過上面使用Create( new HashSet<string> )來進行配置,我們使用Dictionary<string,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
StackExchange.Redis 使用-配置 (四)