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

在Azure VM中使用Booksleeve Redis客户端时的Redis连接错误

邰棋
2023-03-14
问题内容

我最近开始在新的Azure
VM上托管我的一个副项目。该应用程序将Redis用作内存缓存。在本地环境中一切正常,但是现在我已将代码移至Azure,我发现Bookleeve中出现了一些奇怪的异常。

当应用首次启动时,一切正常。但是,在闲置约5-10分钟后,对应用程序的下一个请求遇到了网络异常(我现在正在工作,并且没有确切的错误消息,因此我回到家时会张贴这些消息,如果人们认为他们与讨论密切相关),这将导致内部MessageQueue关闭,从而导致随后的每个Enqueue()都引发异常(“队列已关闭”)。

因此,经过一番谷歌搜索后,我发现了这样的帖子:使用BookSleeve关于DIY连接管理器维护开放的Redis连接。如果那是最好的做法,那么我当然可以实施类似的措施。

所以,问题:

  1. RedisConnection在一定时间后定期关闭是否正常?
  2. 我已经看过该conn.SetKeepAlive()方法,但是我尝试了许多不同的值,但似乎没有任何作用。还有更多的东西吗?还是我吠错了树?
  3. 上面的帖子中的连接管理器想法是处理这种情况的最佳方法吗?
  4. 任何人都可以进一步说明为什么在新的Azure VM中托管我的Redis实例会导致此问题吗?我还可以确认,如果我对Azure Redis VM运行本地环境,则会遇到此问题。

就像我说的那样,如果不活动后Redis连接死掉是不寻常的,那么我回到家时会从日志中发布堆栈跟踪和异常。

谢谢!

UPDATE
Didier在评论中指出,这可能与Azure使用的负载平衡器有关:http :
//blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-
balancer-
超时详细信息

假设是这种情况,那么实现可解决此愚蠢问题的连接管理器的最佳方法是什么。我假设我不应该为每个工作单元创建连接,对吗?


问题答案:

从其他答案/评论来看,这听起来像是由于天青的基础架构关闭了看上去空闲的套接字而引起的。您 可能
只是在某个地方有一个定期执行某种操作的计时器,但是请注意,它已经内置在Booksleeve中:在连接时,它会检查redis连接超时,并配置心跳以防止redis关闭套接字。您可能可以背负此操作,以防止天蓝色也关闭套接字。例如,在redis-
cli会话中:

config set timeout 30

应该将redis(运行中,无需重新启动)配置为具有30秒的连接超时。然后,书架应自动采取措施,以确保在30秒之前不久出现心跳。请注意,如果此操作成功,则还应该编辑配置文件,以便在下次重启后也应用此设置。



 类似资料:
  • 问题内容: 我在ElastiCache上运行Redis集群。 多个进程连接到Redis集群。每个进程都位于Docker容器中。流程不尽相同-我有一个流程,一个流程等。 正常运行几天后,连接到Redis时,我的某些进程开始超时。当我进入受影响的容器并尝试通过到达群集时,与群集的连接超时。这告诉我,问题不仅影响过程,而且影响整个容器。 当我从任何其他容器中使用时,连接都不会出现问题。 我的进程会根据需

  • 问题内容: 有没有一种方法可以使用客户端(而不是Node.js)JavaScript直接连接到Redis? 我已经为一些项目成功使用了Node.js + PHP + Redis + Socket.io(用于客户端)。但是,我确实认为这可以进一步简化为类似PHP + Redis + Browser javascript的东西- 取出Node.js服务器,这是我不愿意使用的另一台服务器。对于简单的事情

  • 问题内容: 我正在设计一个将Redis用作数据库的Web服务,并且我想了解使用Redis与StackService客户端连接的最佳实践。 关键是我一直在阅读有关Redis的文章,发现与服务器交互的最佳方法是使用单个并发连接。 问题是,尽管每当Web客户端向Web服务发出请求时,我都会使用 PooledRedisClientManager ,但我又获得了一个到Redis服务器的连接客户端(打开的连接

  • 我启用了在集群模式下配置的aws redis弹性缓存,并且我有一个主副本和一个副本(都位于不同的可用性区域)。我正在使用Spring RedisTemboard以及LettuceClientConfiguration,但当我尝试写入redis时,会出现以下错误:- [超文本传输协议-Nio-8080-exec-5]ERRORc.a.w.c.auth.登录-身份验证失败:执行中出错;嵌套异常io.l

  • 我正在制作一个Flask网络应用程序,我正在使用Flask Socketio。出于各种原因,我还需要使用websocket客户端包。一切正常,但当我尝试在不同网络上的不同计算机上运行应用程序时,出现以下错误: 我已经尽可能地将我的代码归结为以下内容,这些代码在我的计算机上仍然有效,但在另一台计算机上给出了相同的错误: 只是一个基本的“Hello World”html页面。 什么样的东西会让我在一台

  • 莴苣支持这种开箱即用的群集/分片吗?如果是,如何将其配置为使用客户端散列?