ServiceStack.Redis 认证 Redis Sentinel + Redis

ServiceStack.Redis authentication Redis Sentinel + 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}";