gpt4 book ai didi

c# - 在 Azure VM 中使用 Booksleeve Redis 客户端时出现 Redis 连接错误

转载 作者:IT王子 更新时间:2023-10-29 05:57:20 25 4
gpt4 key购买 nike

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

当应用程序第一次启动时,一切正常。但是,在大约 5-10 分钟不活动后,对应用程序的下一个请求会遇到网络异常(我现在正在工作,没有确切的错误消息,所以我会在回家时发布它们,如果人们认为它们与讨论密切相关)这会导致内部 MessageQueue 关闭,从而导致每个后续的 Enqueue() 抛出异常(“队列已关闭”)。

经过一番谷歌搜索后,我发现了这个帖子:Maintaining an open Redis connection using BookSleeve关于 DIY 连接管理器。如果这是最好的行动方案,我当然可以实现类似的措施。

那么,问题:

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

就像我说的,如果 Redis 连接在不活动后终止的情况并不常见,我会在回家后发布堆栈跟踪和日志中的异常。

谢谢!

更新Didier在评论中指出,这可能与Azure使用的负载均衡器有关:http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

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

最佳答案

从其他答案/评论来看,这听起来像是由 azure 基础设施关闭看起来空闲的套接字引起的。您可以简单地在某处设置一个计时器,定期执行某种操作,但请注意,这已经内置在 Booksleeve 中:当它连接时,它会检查 redis 连接超时是多少,并配置一个心跳防止redis关闭socket。您也许可以使用它来防止 azure 也关闭套接字。例如,在 redis-cli session 中:

config set timeout 30

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

关于c# - 在 Azure VM 中使用 Booksleeve Redis 客户端时出现 Redis 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com