StackExchange.Redis的Basic Usage文档解释说ConnectionMultiplexer
是长期存在的,并且预计会被重用。
但是当与服务器的连接断开时呢?ConnectionMultiplexer
会自动重新连接吗?或者有必要像this answer那样编写代码(引用该答案):
if (RedisConnection == null || !RedisConnection.IsConnected) {
RedisConnection = ConnectionMultiplexer.Connect(...);
}
RedisCacheDb = RedisConnection.GetDatabase();
上面的代码是否适合处理断开连接的恢复,或者它实际上会导致多个ConnectionMultiplexer
示例?同样,应该如何解释IsConnected
属性?
- [旁白:我认为上面的代码是一种非常糟糕的延迟初始化形式,特别是在多线程环境中-请参阅Jon Skeet's article on Singletons]。
2条答案
按热度按时间q3qa4bjr1#
以下是Azure Redis Cache团队推荐的模式:
以下是几点要点:
eufgjt7s2#
是的,你需要这种类型的验证来修复断开的连接。一些线程安全也应该考虑在内。这是我通常这样做的:
然后我在需要调用Redis端点的任何地方都使用
RedisMultiplexer
属性。我通常不存储GetDatabase()
调用的结果,因为文档说这是一个非常轻量级的调用。