不知道大家有没有遇到过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进行操作并未出现返回错误的情况。。。具体原因暂不明白,望大家踊跃讨论!!!
本文探讨了使用JedisCluster进行批量订单锁定时,set()方法出现异常返回,即上锁成功但返回结果不是OK的问题。通过三次测试验证了问题的存在,并详细记录了从发现问题到定位原因再到解决问题的全过程。最终采用Lua脚本直接操作Redis解决了这一难题。
41





