jedisCluster中分布式锁遇到的坑总结篇

不知道大家有没有遇到过jedisCluster.set()方法上锁时出现上锁成功但返回结果并不是OK,

具体需求如下:

1.跑批量订单,需要对每个订单进行操作。

2.其他地方可能操作这些订单。

3.为了只有一个地方操作,将所有的订单逐一上锁出现问题,

之后我对jedisCluster进行测试 代码如下我们做三次测试以确保实验的准确性:

测试1:

结果如下

redis中查看

测试2,这次只放置1000个:

结果

测试3:

结果发现并无出现;

结论:

如上述可以看出次操作并无规律可循,不管处理数多少都可能会出现部分key存入成功但为正确返回的现象,因查阅许多资料都为发现有帖子出现过这类情况,故自行整理了一下 并最终找到解决办法,希望可以帮助遇到相同问题的读者解决,最终解决方案如下:

因个人认为出现这种问题的可能原因是set key值得时候 是操作的redis客户端,导致redis集群在跳节点存入时返回出现差异

最后将

jedisCluster.set(i + "ceshi"+i, "off", "NX", "EX", 60)
改写为:
jedisCluster.eval("return redis.call('set', KEYS[1],'1','nx', 'ex', '180') ", key,new ArrayList<>())
成功解决问题,应用lua写法直接对redis进行操作并未出现返回错误的情况。。。具体原因暂不明白,望大家踊跃讨论!!!

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值