微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。