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

2024-01-03

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

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

所以经过一番谷歌搜索后我发现了这个帖子:使用 BookSleeve 维护开放的 Redis 连接 https://stackoverflow.com/questions/8645953/maintaining-an-open-redis-connection-using-booksleeve关于 DIY 连接管理器。如果这是最好的行动方案,我当然可以实施类似的措施。

那么,问题:

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

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

Thanks!

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

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


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

config set timeout 30

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Azure VM 中使用 Booksleeve Redis 客户端时出现 Redis 连接错误 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 设置“slave-read-only no”是否会使从站确认与主站的每个哈希查找?

    我想配置从站以启用写入 slave read only no 用例是启用临时缓存 然而 文档中的这一段让我感到担忧 通常 从节点会将客户端重定向到给定命令中涉及的哈希槽的权威主节点 但是客户端可以使用从节点 以便使用 READONLY 命令
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐