我正在使用用于 JVM 的 Lettuce Redis 客户端来构建由 Redis 列表支持的队列。理想情况下,它的行为类似于内存队列,但由于涉及网络交互,这是不可能的。
Lettuce docs 中有一个关于错误处理的部分,在我的情况下,我想在错误时重试失败的命令。问题是异常层次结构不是很细,我不确定如何处理以下问题:
- 如何确定是否可以重试失败的命令?命令可能无限期失败并且重试会导致无限循环的原因有很多——当前的 Redis 版本不支持使用的命令语法,密钥已经存在并且它是不兼容的类型等。
- 如果网络不可靠,我可以依靠生菜始终重新连接吗?是否有可能在某些情况下我不应该重试某些
RedisException
,或者NativeIoException
重新创建 Redis 客户端实例,甚至重新启动整个应用程序? - 有没有办法知道 Redis 是否实际执行了失败的命令并且重试不会导致重复或数据丢失(或者至少在某些情况下这可能由异常类确定)?这可能是一次性交付的一个基本问题,据我所知,Redis 没有提供任何方法来处理这个问题(例如,与 Kafka 不同)但也许有一些既定的做法来处理这个问题?
这个问题看起来每个人都必须处理,但似乎没有很多关于此的信息。