当前位置: 首页 > 面试题库 >

ConnectionMultiplexer如何处理断开连接?

程祯
2023-03-14
问题内容

StackExchange.Redis的“
基本用法”文档解释说,该方法ConnectionMultiplexer是长期存在的,有望重新使用。

但是,当与服务器的连接断开时该怎么办?是否ConnectionMultiplexer自动重新连接,或者是否有必要像此答案一样编写代码(引用该答案):

        if (RedisConnection == null || !RedisConnection.IsConnected)
        {
            RedisConnection = ConnectionMultiplexer.Connect(...);
        }
        RedisCacheDb = RedisConnection.GetDatabase();

上面的代码是处理断开连接恢复的好方法,还是实际上会导致多个ConnectionMultiplexer实例?同样,该IsConnected属性应如何解释?

[另外:我相信上面的代码是惰性初始化的一种非常糟糕的形式,尤其是在多线程环境中-请参阅 Jon
Skeet在Singletons上的文章

]。


问题答案:

这是Azure Redis缓存团队建议的模式

private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => {
    return ConnectionMultiplexer.Connect("mycache.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});

public static ConnectionMultiplexer Connection {
    get {
        return lazyConnection.Value;
    }
}

一些要点:

  • 它使用Lazy 处理线程安全的初始化
  • 它设置为“ abortConnect = false”,这意味着如果初始连接尝试失败,则ConnectionMultiplexer将在后台静默重试,而不是引发异常。
  • 它并 没有 检查IsConnected财产,因为如果连接中断ConnectionMultiplexer会在后台自动重试。


 类似资料:
  • 问题内容: 大家好。我有一个使用ServerSocket和Socket类用Java编写的服务器。 我希望能够检测并处理断开连接,然后在必要时重新连接新客户端。 检测客户端断开连接,关闭套接字然后接受新客户端的正确步骤是什么? 问题答案: 大概是在从套接字读取数据,也许是在输入流上使用包装器,例如BufferedReader。在这种情况下,当相应的读取操作返回-1(对于原始read()调用)或为nu

  • 我在服务器上使用Dart 1.8.5。我想实现TCP Socket Server,它侦听传入连接,向每个客户端发送一些数据,并在客户端断开连接时停止生成数据。 下面是示例代码 此代码接受连接并打印“发送数据”。但即使客户不在,它也不会打印“停止发送”。 问题是:如何捕捉侦听器中的客户端断开?

  • 我试图创建一个客户机,该客户机可以使用SSE(服务器发送的事件)从服务器接收事件,我使用OkHttp3和OkHttp3-sse库(com.squareup.OkHttp3:OKHTTP:4.1.0&com.squareup.OkHttp3:OKHTTP-SSE:4.1.0)来实现这一点。我可以连接到服务器并接收事件,但在某个时候,我想断开客户端并关闭我的应用程序。这就是问题所在。连接被关闭,但应用

  • 问题内容: 当我的MongoDB连接空闲几分钟后,下一个请求将错误结束。从命令行客户端,它看起来像这样: 我看到针对MongoHQ和MongoLab的沙箱实例的问题。 由于重新连接,下一个请求通过正常。这是我的网络应用程序中的一个问题,因为几分钟不活动后,在网络请求期间将出现此错误。有两件事让我感到惊讶: MongoDB连接被如此频繁和频繁地破坏,并且 驱动程序只是引发一个异常,而不是在重新连接后

  • 我的用例是周期性地轮询本地目录中的新文件列表,然后将它们上传到1个连接中的FTP服务器。Camel路由在Spring XML中定义如下:

  • 我正在尝试设置Kafka Connect,目的是运行Elasticsearch chSinkConntor。 Kafka安装程序,由3个使用Kerberos、SSL和ACL保护的代理程序组成。 到目前为止,我一直在尝试使用docker/docker-com的连接器运行连接框架和elasticserch-server本地化(使用Kafka 2.4连接到远程kafka安装(Kafka 2.0.1-实际