使用 Lettuce 时重试 Redis 命令什么时候是安全的?

问题描述

我正在使用面向 JVM 的 Lettuce Redis 客户端来构建由 Redis 列表支持的队列。 理想情况下,它的行为类似于内存中的队列,但由于涉及网络交互,这是不可能的。

Lettuce 文档中有一个 section on error handling,就我而言,我想在出错时重试失败的命令。问题是异常层次结构不是很细粒度,我不确定如何处理以下问题:

  • 如何确定是否可以重试失败的命令?命令可能会无限期失败并且重试会导致无限循环的原因有很多 - 当前的 Redis 版本不支持使用的命令语法,密钥已经存在并且它的类型不兼容等。立>
  • 在网络不可靠的情况下,我可以依靠 Lettuce 始终重新连接吗?是否有可能在某些情况下我不应该重试某些 RedisExceptionNativeIoException,而是重新创建 Redis 客户端实例甚至重新启动整个应用程序?
  • 有没有办法知道失败的命令是否实际上没有被Redis执行并且重试不会导致重复或数据丢失(或者至少在某些情况下这可能由异常类确定)?这可能是一次交付的基本问题,据我所知,Redis 没有提供任何方法来处理这个问题(例如,与 Kafka 不同),但也许有一些既定的做法来处理这个问题?立>

这个问题看起来像每个人都必须处理的问题,但似乎没有很多关于此的信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)