代码之家  ›  专栏  ›  技术社区  ›  Pablo Santa Cruz

REDIS LIST MOVE恢复/回滚策略

  •  0
  • Pablo Santa Cruz  · 技术社区  · 2 年前

    我有以下场景:

    1. Redis SENTINEL,带有一个主REDI和两个副本
    2. Redis连接超时配置为30秒
    3. Lettuce的Java REDIS客户端
    4. 生菜REDIS客户端上的春季数据

    我有一个REDIS列表,我正在使用它作为队列。正如预期的那样,队列中的每个元素都必须由一个且只能由一个元素处理器处理。然而,在一些奇怪的角落案例中,我有时会遇到这样的情况:

    -> BLMOVE A B 8
         (*) I get a timeout here after 30 seconds
    

    (这是,从列表中移动 A 要列出 B 和块 8 seconds

    我遇到的问题是ELEMENT实际上是从列表中移出的 A. 要列出 B 并且我仍然得到超时,所以在这个异常之后,元素在队列中丢失 B 并且永远不会被处理。我知道这可能是REDIS连接的网络问题。

    我的问题是:处理这样的案件最好的方法是什么?有没有办法“恢复”未处理的元素并重试?

    0 回复  |  直到 2 年前
        1
  •  1
  •   Sandeep More    2 年前

    有几种方法可以解决此问题:

    1. 使用具有故障切换功能的REDIS SENTINEL。这样,如果主REDIS实例发生故障,sentinel将自动故障转移到副本实例,并且元素不会丢失。

    2. 使用REDIS CLUSTER。这将为您提供高可用性,并确保您的元件在发生故障时不会丢失。

    3. 使用REDIS复制设置。这将为您提供一个热备用REDIS实例,如果主实例出现故障,该实例可以接管。

    4. 使用REDIS Persistence设置。这将确保您的元素在发生故障时不会丢失。

    5. 使用REDIS备份设置。这将确保您的元素在发生故障时不会丢失。