guava-retrying模块实现redis连接重试

guava-retrying模块实现redis连接重试


guava-retrying是一个优秀的连接重试工具,最近项目也在多处使用这个工具做相应模块的连接,其中关于redis的连接重试比较有意思。这里分享下。

原代码:

 Jedis jedis = jedisPool.getResource();
  return jedis;

使用guava-retrying优化后的代码

final Jedis[] jedis= {null};
//创建重试对象
Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
        .retryIfException()
        //每次重试等待时间1s
        .withWaitStrategy(WaitStrategies.fixedWait(1000, TimeUnit.MILLISECONDS))
        //重试次数10
        .withStopStrategy(StopStrategies.stopAfterAttempt(10))
        .build();
try {
    retryer.call(() -> {
        jedis[0] = jedisPool.getResource();
        String value = jedis[0].ping();
        return StringUtils.isNotBlank(value);
    });
} catch (Exception e) {
LOGGER.error("多次获取Redis连接失败!");
}
       return jedis[0];

分析:

之前已经使用guava-retrying实现对HBase和OpenTSDB的重试,现在优化中尝试对Redis能进行重试连接,但在实现中遇到了两个问题

1是无法用简单的true和false判断jedis连接是否正常。

2是该方法重试后需要返回整个jedis对象。

第一个问题在于jedis的很多方法无法返回true和false,需要添加逻辑。最后选择了想到了ping,可以根据返回是否为null判断连接是否成功。

第二个问题在于retryer.call和整个方法的返回不一致,后面改写了lambda表达式完成了该方法的实现。


guava-retrying参考资料:https://blog.csdn.net/dxh0823/article/details/80850367

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值