ServiceStack.Redis 认证 Redis Sentinel + Redis
ServiceStack.Redis authentication Redis Sentinel + Redis
问题:
如何正确验证身份并不明显:
- 哨兵
- redis 实例本身
使用 ServiceStack.Redis 解决方案时。
According to the docs 为 redis/sentinel 提供密码的正确方法是通过 URLs 按以下方式设置密码:
var sentinel = new RedisSentinel(new[] {"password@localhost:26381"})
这工作正常,但我如何为 redis 连接本身提供密码?
我在 URL 中指定的密码不会被复制到 redis 连接。
我找到了一个解决方法,似乎有效,但我不确定它是否真的涵盖了所有可能的情况:
//Get the original factory
var clientFactory = RedisConfig.ClientFactory;
//Decorate it with the logic that sets a password.
RedisConfig.ClientFactory = c =>
{
c.Password = "password";
return clientFactory.Invoke(c);
};
//Continue to initialize sentinels
var sentinel = new RedisSentinel(new[] {"password@localhost:26379"});
看起来这实际上会解决问题,并会为连接到 redis 实例(而不是哨兵)提供密码。
问题是:这是推荐的做法吗?或者有更好的方法吗?
您可以使用 RedisSentinel HostFilter 为 sentinel 连接到的各个主机自定义连接字符串,例如:
sentinel.HostFilter = host => $"password@{host}";
问题:
如何正确验证身份并不明显:
- 哨兵
- redis 实例本身
使用 ServiceStack.Redis 解决方案时。
According to the docs 为 redis/sentinel 提供密码的正确方法是通过 URLs 按以下方式设置密码:
var sentinel = new RedisSentinel(new[] {"password@localhost:26381"})
这工作正常,但我如何为 redis 连接本身提供密码? 我在 URL 中指定的密码不会被复制到 redis 连接。
我找到了一个解决方法,似乎有效,但我不确定它是否真的涵盖了所有可能的情况:
//Get the original factory
var clientFactory = RedisConfig.ClientFactory;
//Decorate it with the logic that sets a password.
RedisConfig.ClientFactory = c =>
{
c.Password = "password";
return clientFactory.Invoke(c);
};
//Continue to initialize sentinels
var sentinel = new RedisSentinel(new[] {"password@localhost:26379"});
看起来这实际上会解决问题,并会为连接到 redis 实例(而不是哨兵)提供密码。
问题是:这是推荐的做法吗?或者有更好的方法吗?
您可以使用 RedisSentinel HostFilter 为 sentinel 连接到的各个主机自定义连接字符串,例如:
sentinel.HostFilter = host => $"password@{host}";