【转】https://blog.csdn.net/smj20170417/article/details/79928228
使用StackExchange.Redis操作Redis--配置
2018年04月13日 14:35:41 学习不止于前 阅读数:3277
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/smj20170417/article/details/79928228
1、最简单的配置
var conn = ConnectionMultiplexer.Connect("localhost");
在不指定端口号的情况下,默认6379端口;附加选项只是简单的附件(逗号分隔)。端口常用冒号(:)表示。例如
var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");
通过字符串进行配置:
-
string configString = GetRedisConfiguration();
-
var options = ConfigurationOptions.Parse(configString);
-
options.ClientName = GetAppName(); // only known at runtime
-
options.AllowAdmin = true;
-
conn = ConnectionMultiplexer.Connect(options);
配置选项
ConfigurationOptions
对象具有许多的属性,所有这些都在智能提示中都有。
一些更常用的选项包括:
配置字符串 | ConfigurationOptions | 默认值 | 含义 |
---|---|---|---|
abortConnect={bool} | AbortOnConnectFail | true (Azure 上默认值为 false ) | 如果为true,Connect 没有服务器可用时将不会创建连接 |
allowAdmin={bool} | AllowAdmin | false | 启用被认为具有风险的一系列命令 |
channelPrefix={string} | ChannelPrefix | null | 所有发布/订阅操作的可选频道前缀 |
connectRetry={int} | ConnectRetry | 3 | 在初始 Connect 期间重复连接尝试的次数 |
connectTimeout={int} | ConnectTimeout | 5000 | 连接操作的超时时间(ms) |
configChannel={string} | ConfigurationChannel | __Booksleeve_MasterChanged | 用于传达配置更改的广播通道名称 |
configCheckSeconds={int} | ConfigCheckSeconds | 60 | 检查配置的时间(秒)。如果支持的话,这会以交互式套接字的方式保持活动。 |
defaultDatabase={int} | DefaultDatabase | null | 默认数据库索引, 从 0 到 databases - 1 (0 到 Databases.Count -1) |
keepAlive={int} | KeepAlive | -1 | 发送消息以帮助保持套接字活动的时间(秒)(默认时间60s) |
name={string} | ClientName | null | 标识 redis 中的连接 |
password={string} | Password | null | redis 服务器的密码 |
proxy={proxy type} | Proxy | Proxy.None | 正在使用的代理类型(如果有); 例如“twemproxy” |
resolveDns={bool} | ResolveDns | false | 指定DNS解析应该是显式和热切,而不是隐式 |
serviceName={string} | ServiceName | null | 目前尚未实施(预期与sentinel一起使用) |
ssl={bool} | Ssl | false | 指定应使用SSL加密 |
sslHost={string} | SslHost | null | 在服务器证书上强制执行特定的SSL主机标识 |
syncTimeout={int} | SyncTimeout | 1000 | 允许同步操作的时间(ms) |
tiebreaker={string} | TieBreaker | __Booksleeve_TieBreak | 用于在不明确的主场景中选择服务器的键 |
version={string} | DefaultVersion | (3.0 in Azure, else 2.0) | Redis版本级别(当服务器要使用的版本默认不可用时使用) |
writeBuffer={int} | WriteBuffer | 4096 | 输出缓冲区的大小 |
ReconnectRetryPolicy={IReconnectRetryPolicy} | ReconnectRetryPolicy | 重新连接重试策略 |
补充的只有代码才支持的选项:
ReconnectRetryPolicy (IReconnectRetryPolicy) - Default: ReconnectRetryPolicy = LinearRetry(ConnectTimeout);
- 重连重试策略(
IReconnectRetryPolicy
)。默认设置:ReconnectRetryPolicy = LinearRetry(ConnectTimeout);
配置字符串中的令牌是逗号分隔的;任何没有=
符号的都假定为redis服务器端点。 没有显式端口的端点将在未启用ssl的情况下使用6379,如果启用了ssl则使用6380。
以$
开头的令牌被用来表示命令映射,例如:$ config = cfg
。
2、自动配置和手动配置
-
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"
-
};
代码:
-
ConfigurationOptions config = new ConfigurationOptions
-
{
-
EndPoints =
-
{
-
{"127.0.0.1",7000 },
-
{"127.0.0.1",7001 },
-
{"127.0.0.1",7002 },
-
{"127.0.0.1",7003 },
-
{"127.0.0.1",7004 },
-
{"127.0.0.1",7005 }
-
},
-
KeepAlive = 180,
-
DefaultVersion = new Version(1, 1, 1)
-
};
-
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(config);
-
//ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("127.0.0.1:7005,127.0.0.1:7004,127.0.0.1:7003,127.0.0.1:7002,127.0.0.1:7001,127.0.0.1:7000");
-
var db=redis.GetDatabase();
-
var v1=db.StringGet("k1");
-
db.StringSet("ks", "vs");
-
var ks=db.StringGet("ks");
-
Console.WriteLine(ks);
-
Console.WriteLine(v1);
3、重命名命令
-
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),
-
}
4.Twemproxy
Twemproxy 是允许使用多个 redis 实例就像它是一个单个服务器,具有内置分片和容错(很像 redis 集群,但单独实现)的工具。 Twemproxy可用的功能集减少。 为了避免手动配置,可以使用 Proxy
选项:
-
var options = new ConfigurationOptions
-
{
-
EndPoints = { "my-server" },
-
Proxy = Proxy.Twemproxy
-
};
5.重新连接重试策略
ReconnectRetryPolicy可以是线性的(默认),指数的或者是一个自定义的重试策略。
-
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