AddStackExchangeRedisCache - 创建了多个连接

AddStackExchangeRedisCache - multiple connections created

我在 .NET 5 中有一个使用 Microsoft.Extensions.Caching.StackExchangeRedis 的 Web API。我已经使用给定包中的扩展方法添加了 Redis 缓存的 IDistributedCache 实现。

services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = Configuration.GetConnectionString("RedisConnection");
});

现在,当我从 Redis 请求某些东西时(因为它是单例),它应该创建 1 个连接,因为 IDistributedCache 的内部实现 (Github link) 执行了一次 ConnectionMultiplexer.Connect()。但是,当我使用 redis-cli 并执行 client list 命令时,它列出了我的 3 个连接(其中 1 个当前通过 redis-cli 连接,另外两个来自 API。真的应该发生这种情况,因为它真的是 1 个连接吗?

127.0.0.1:6379> client list
id=6 addr=127.0.0.1:4396 fd=9 name= age=3305 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
127.0.0.1:6379> client list
id=6 addr=127.0.0.1:4396 fd=9 name= age=3317 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=11 addr=127.0.0.1:1046 fd=12 name=PC age=4 idle=3 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hmget
id=12 addr=127.0.0.1:1048 fd=11 name=PC age=4 idle=4 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe

如果您查看第二个 SE.Redis 连接,它是订阅者:

id=12 addr=127.0.0.1:1048 fd=11 name=PC age=4 idle=4 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe

在幕后,SE.Redis 正在设置自己以侦听通过 redis 发布的事件,特别是,我认为它正在设置自己以从其他 SE.Redis 实例那里听到 master 已更改.理论上,如果存在故障转移,SE.Redis 个实例之一将检测到它并将发布到通道 __Booksleeve_MasterChanged,这将向其他实例发出故障转移信号。您将通过 1 个连接发送内容,但订户连接将用于其他内容。您可以 运行 redis-cli monitor 查看来自 SE.Redis 的订阅。