Redis实现锁和幂等性

该博客通过一个示例展示了如何利用Redis的setnx命令实现幂等性操作。在程序中,当请求首次到达时,设置防重Key并进行业务处理,成功后将结果存入Redis。若为重复请求,则返回之前的结果,确保同一请求只处理一次。
摘要由CSDN通过智能技术生成

1. 流程示意图

image-20220726111536269

2. 示例程序

2.1 程序主体

private static String lockTest(String orderId, Jedis jedis) { //写入防重Key long result = jedis.setnx("union_" + orderId, "1"); // 1 第一次请求 if (result == 1) { //正常处理 try { String dealResult = ""; System.out.println("正常处理过程"); dealResult = "处理结果:{X:XXXXXXX}"; //处理完成,处理结果写入Redis jedis.set("result_" + orderId, dealResult); System.out.println("返回正常结果"); return dealResult; } catch (Exception e) { //异常情况,删除防重Key jedis.del("union_" + orderId); throw new RuntimeException("异常,请重试"); } } else {//重复请求 //返回上次请求结果 System.out.println("返回幂等取结果"); return jedis.get("result_" + orderId); } }

2.2 测试程序

public static void main(String[] args) { String orderId = "order123456"; Jedis jedis = new Jedis("127.0.0.1", 6379); //删除之前测试结果 jedis.del("union_" + orderId); jedis.del("result_" + orderId); System.out.println(lockTest(orderId, jedis)); System.out.println(lockTest(orderId, jedis)); }

2.3 执行结果

第一次返回的是正常处理结果,第二次幂等性返回的第一次处理结果。

正常处理过程 返回正常结果 处理结果:{X:XXXXXXX} 返回幂等取结果 处理结果:{X:XXXXXXX}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值