redis环境的搭建,可参考博主的文章
windows环境下 单机、集群、哨兵模式的redis环境_min开发的博客-CSDN博客windows环境下redis单机、集群、哨兵的部署https://blog.csdn.net/liu649983697/article/details/125184688如何集成redis,参考博主的文章:
springboot+redis集群接入集成,多集群多连接池多数据源,redis工具类_min开发的博客-CSDN博客_redis集群使用连接池目录1.添加maven依赖,pom文件中添加2.添加yml中redis配置项3.配置luttuce连接池template4.编写redis工具类5.使用redis不写一大篇废话了,redis介绍啊等等东西百度吧。直接上集成步骤1.添加maven依赖,pom文件中添加
@PostMapping("/addPhone")
public ResponseVo addPhone(@RequestParam("phoneName")String phoneName, @RequestParam("number") Integer number) {
String lockKey = phoneName + "_lock";
boolean locked = redisUtils.getLock(lockKey, 1, 5, 0);
if (locked) {
//获取到锁,开始添加手机
redisUtils.incr(phoneName, number);
//添加手机完成,释放锁
redisUtils.releaseLock(lockKey, 1);
} else {
//没取到锁
log.info("获取锁失败,未获取到锁,业务逻辑未处理!");
}
return new ResponseVo.Builder().ok().build();
}
2.编写抢手机接口
@PostMapping("/snatchPhone")
public ResponseVo snatchPhone(@RequestParam("phoneName") String phoneName, @RequestParam("userName") String userName) {
String lockKey = phoneName + "_lock";
boolean locked = redisUtils.getLock(lockKey, 1, 5, 1);
if (locked) {
try {
String userSnatchPhoneKey = userName + "_" + phoneName;
if (Boolean.TRUE.equals(redisUtils.hasKey(userSnatchPhoneKey))) {
log.info("好吧,原来我已经抢到 " + phoneName + " 手机了!");
} else {
Object phoneNum = redisUtils.get(phoneName);
if(null == phoneNum || Integer.parseInt("" + phoneNum) < 1){
log.info("亏大了,手机被抢光了!");
} else {
Long result = redisUtils.decr(phoneName, 1);
log.info("我抢到 " + phoneName + " 手机了, 还剩:" + result + "个!");
//此处就可以使用消息队列处理生成支付订单了
redisUtils.set(userSnatchPhoneKey, 1);
}
}
}catch (RuntimeException e){
log.info("好像出了点小问题呢,请稍后再试!");
}finally {
//处理业务结束,释放锁
redisUtils.releaseLock(lockKey, 1);
}
} else {
//没取到锁
log.info("太可惜了,我没抢到 " + phoneName + " 手机,再试一次吧!");
}
return new ResponseVo.Builder().ok().build();
}
3.使用jmeter进行并发测试
2022-06-09 18:40:46.422 INFO 52736 --- [o-8081-exec-119] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:9个! 2022-06-09 18:40:46.436 INFO 52736 --- [o-8081-exec-117] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:8个! 2022-06-09 18:40:46.444 INFO 52736 --- [o-8081-exec-204] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:7个! 2022-06-09 18:40:46.457 INFO 52736 --- [o-8081-exec-207] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:6个! 2022-06-09 18:40:46.769 INFO 52736 --- [o-8081-exec-117] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:5个! 2022-06-09 18:40:46.785 INFO 52736 --- [o-8081-exec-216] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:4个! 2022-06-09 18:40:46.796 INFO 52736 --- [o-8081-exec-278] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:3个! 2022-06-09 18:40:46.928 INFO 52736 --- [o-8081-exec-322] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:2个! 2022-06-09 18:40:46.955 INFO 52736 --- [o-8081-exec-117] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:1个! 2022-06-09 18:40:46.997 INFO 52736 --- [o-8081-exec-216] com.liu.controller.TestController : 我抢到 iphone 13 plus x 手机了, 还剩:0个! 2022-06-09 18:40:47.036 INFO 52736 --- [o-8081-exec-238] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.095 INFO 52736 --- [o-8081-exec-246] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.101 INFO 52736 --- [o-8081-exec-231] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.107 INFO 52736 --- [o-8081-exec-306] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.114 INFO 52736 --- [o-8081-exec-267] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.119 INFO 52736 --- [o-8081-exec-351] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.122 INFO 52736 --- [o-8081-exec-227] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.127 INFO 52736 --- [o-8081-exec-270] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.136 INFO 52736 --- [o-8081-exec-339] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.140 INFO 52736 --- [o-8081-exec-223] com.liu.controller.TestController : 亏大了,手机被抢光了! 2022-06-09 18:40:47.156 INFO 52736 --- [o-8081-exec-302] com.liu.controller.TestController : 亏大了,手机被抢光了!



