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文件中添加<!-- redis --><dependency> <groupId>org.springframework.boot</groupId> &https://blog.csdn.net/liu649983697/article/details/119794541如何实现分布式锁,可参考博主的文章 redis分布式锁实现的两种方式 lua脚本与redisson,解决自定义超时后锁自动续期失效问题_min开发的博客-CSDN博客redis分布式锁的实现,两种实现方式:lua脚本、redisson,以及解决使用redisson时自定义锁超时时间后,锁无法自动续期问题https://blog.csdn.net/liu649983697/article/details/125147689

1.编写接口添加手机

/*** 添加手机** @param phoneName : 手机名称* @param number : 添加数量* @author kevin* @date 2022/6/9*/@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.编写抢手机接口

/*** 测试redis分布式锁,秒杀抢手机(一个用户只能抢一个手机)** @author kevin* @date 2022/6/9*/@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        : 亏大了,手机被抢光了!

springboot + redis(兼容单机、哨兵、集群) + 分布式锁模拟抢手机相关推荐

  1. SpringBoot整合Redis(单机/哨兵/集群)

    pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...

  2. Redlock——Redis集群分布式锁

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 分布式锁是一种非常有用的技术手段.实现高效的分布式锁有三个属性需要考虑: 安全属性:互斥,不管什么时候,只有一个客户端持有锁 ...

  3. 第一节 Redis 使用及哨兵集群 2022-1-2

    Java组件总目录 Redis 使用及哨兵集群 Java组件总目录 一 Redis基本数据类型使用场景 1 String 2 List 存储列表结构 3 Hash 4 Set 5 Zset 二级目录 ...

  4. C#两大知名Redis客户端连接哨兵集群的姿势

    前言 前面<Docker-Compose搭建Redis高可用哨兵集群>, 我的思路是将Redis.Sentinel.Redis Client App链接到同一个网桥网络,这个网桥内的Red ...

  5. Redis分片主从哨兵集群,原理详解,集群的配置安装,8大数据类型,springboot整合使用

    文章目录 Redis介绍 Redis分片 Redis主从 Redis哨兵 Redis集群 Redis持久化策略 RDB AOF 持久化方案选择 Redis内存策略 LRU算法 LFU算法 Random ...

  6. Redis从入门到集群分布式实践

    Redis 分布式实践 一. Redis 初识 1.1 Redis 导学 Redis有哪些特点? 高性能的key-value服务器 多种数据结构 丰富的功能 高可用分布式支持 适合人群: 初学者 进阶 ...

  7. redis完整笔记总结-数据类型-事务与锁-集群-分布式锁-常见问题(缓存穿透、击穿、雪崩)

    1. 数据类型 五大基本类型 String hash -> 类似map list set -> zset -> 基于set的有序集合 新增 bitmaps:其实就是string,主要 ...

  8. redis学习-主从-哨兵集群-redis-cluster简单日记

    1.linux下redis安装及部署 redis安装包与ruby安装包下载 (转)Linux下Redis的安装与部署 2.常用命令及简单配置注解 redis-server redis.conf: 启动 ...

  9. Redis 集群分布式锁与 API 网关分布式限流

    https://www.infoq.cn/article/FoQGIk*BzdQWJJ0tKqrJ Redis 集群的历史 Redis 在 3.0 前一般有两种集群方案,一是 proxy(Twempr ...

最新文章

  1. 一步一步学习VirtualBox安装CentOS7和CentOS8
  2. 【转】Python机器学习库
  3. Android之设置资源图片为圆角图片
  4. Nginx面试!mysql时间类型以及获取当前时间,干货满满
  5. .net core项目部署到centos7
  6. oracle db file sequential read,db file sequential read等待事件
  7. 带你封装一个上传图片组件(ant design+react)
  8. oracle实验四运动会,实验四oracle的安全性和完整性控制
  9. PHP仿代下狗源码-素材代下载搜索引擎系统整站打包
  10. 改变根深蒂固的流程可以提高客户忠诚度
  11. Android - Earthquake工程(地震监测) 的 对
  12. 【买衣服】I'm looking for a jacket
  13. 如何设计信息安全领域的实时安全基线引擎
  14. SAI2.0绘画软件中文版(已测可用)
  15. java--javassist学习
  16. 关于字符串的长度和大小的定义
  17. SLC、MLC、TLC和QLC这几种存储颗粒的区别
  18. 常用手持设备的use-agent头信息
  19. 将文件从VMWare虚拟机的Linux系统传到U盘
  20. ppt模板如何制作个性人物海报?

热门文章

  1. [blender]制作一个low poly wash basin低模洗手盆
  2. cs231n 课程作业 Assignment 1
  3. Spring Zuul和Spring Security的整合
  4. 二十八,打糕蒸馍贴花花
  5. 师者,传道授业解惑者也:看现在的培训机构和毕业生就业状况
  6. Linux下修改交换空间swap大小
  7. MATLAB基于Simulink的行波故障测距 ,提出了基于MATLAB/SIMULINK的输电线路故障行波仿真方法
  8. 酷壳网陈皓:Why C++?王者归来
  9. JavaScript中===的用法/编程语言中等号的理解
  10. 【瑞萨RA6系列】使用TinyMaix识别手写数字