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

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

具体需求如下:

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

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

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

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

测试1:

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进行操作并未出现返回错误的情况。。。具体原因暂不明白,望大家踊跃讨论!!!

 

 

你可能感兴趣的:(Redis)