我在 .NET 5 中有一個 Web API,它使用Microsoft.Extensions.Caching.StackExchangeRedis. 我已經IDistributedCache使用給定包中的擴展方法添加了Redis 快取的實作。
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = Configuration.GetConnectionString("RedisConnection");
});
現在,當我從 Redis 請求某些東西時(并且因為它是一個單例),由于IDistributedCache的內部實作(Github 鏈接)執行ConnectionMultiplexer.Connect()一次,它應該創建 1 個連接。但是,當我使用redis-cli并執行該client list命令時,它列出了我總共 3 個連接(我當前連接的 1 個是通過redis-cliAPI連接的,另外兩個是通過 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
uj5u.com熱心網友回復:
如果你看第二個 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 實體的主已更改。理論上,如果發生故障轉移,其中一個 SE.Redis 實體將檢測到它并將發布到 channel __Booksleeve_MasterChanged,這將向其他實體發出故障轉移信號。只有 1 個連接可以發送內容,但訂閱者連接將用于其他內容。您可以運行redis-cli monitor以查看來自 SE.Redis 的訂閱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/343452.html
標籤:C# asp.net核心 Redis .net-5 堆栈交换.redis
上一篇:帶有Razor頁面的Ajax帖子
