在这里参数configure可以是:
- ConfigurationOptions 实例配置
- 字符串方式配置
后面一种也是前面一种的标记形式。
最简单的配置实例就是以主机名来配置:
这会连接到本机上的单个服务器,默认使用Redis的缺省端口:6379。还有一些选项以逗号分隔的方式附加上去。端口通常用一个冒号(:)来表示。配置选项的名字后跟随了一个=号。如下所示:
var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");
我们可以自由的在 string 和 ConfigurationOptions 两者之间相互转换,如下所示:
ConfigurationOptions options = ConfigurationOptions.Parse(configString);
或者
string configString = GetRedisConfiguration();
var options = ConfigurationOptions.Parse(configString);
options.ClientName = GetAppName(); // 仅仅在运行时才知道
options.AllowAdmin = true;
在微软Azure上使用Redis并附上密码的例子:
var conn = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,ssl=true,password=...");
配置选项
ConfigurationOptions 对象具有很多属性,所有选项的说明都已在智能提示里面。下面表格是一些最常用的选项描述:
其他仅用于代码的选项:
- ReconnectRetryPolicy(IReconnectRetryPolicy) - 默认值:ReconnectRetryPolicy = LinearRetry(ConnectTimeout);
在配置字符串中的标记都是以逗号分隔的;任何没有 = 符号的都被假定为Redis的服务终端。如果没有开启SSL,并且终端没有指定一个明确的端口,那么将使用6379作为端口;如果开启了SSL,那么6380将作为端口。以 $ 开始的标记会被当做命令来映射;例如:$config=cfg 。
在很多常见的情况下,StackExchange.Redis 将会自动的配置多个设置选项,包括服务器类型和版本,连接超时和主/从关系配置。可是有时候在Redis服务器这个命令是被禁止的。在这种情况下,提供更多的信息是非常有用的:
ConfigurationOptions config = new ConfigurationOptions
{
EndPoints =
{
{ "redis1", 6380 }
},
CommandMap = CommandMap.Create(new HashSet<string>
{ // 排除几个命令
"INFO", "CONFIG", "CLUSTER",
"PING", "ECHO", "CLIENT"
}, available: false),
KeepAlive = 180,
DefaultVersion = new Version(2, 8, 8),
};
上面的配置等同于下面的字符串配置:
重命名命令
var commands = new Dictionary<string,string> {
{ "select", "use" }, // 由于某种原因重命名为等效的SQL
};
var options = new ConfigurationOptions {
// ...
CommandMap = CommandMap.Create(commands),
// ...
}
上面的配置等同于下面的字符串配置(在连接字符串中):
$INFO=,$SELECT=use
是一个允许多个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 方法,配置消息也可以单独使用主/从更新来请求所有的节点刷新它们的配置。
例如: