【问题标题】:AddStackExchangeRedisCache - multiple connections createdAddStackExchangeRedisCache - 创建了多个连接
【发布时间】:2021-12-13 20:35:04
【问题描述】:

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

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

现在,当我从 Redis 请求某些内容时(并且因为它是单例),由于 IDistributedCache 的内部实现 (Github link) 执行一次 ConnectionMultiplexer.Connect(),它应该创建 1 个连接。但是,当我使用redis-cli 并执行client list 命令时,它列出了我总共3 个连接(我中的一个当前通过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

【问题讨论】:

    标签: c# asp.net-core redis .net-5 stackexchange.redis


    【解决方案1】:

    如果您查看第二个 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 的订阅。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 2012-06-14
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多