用redis实现的秒杀代码案例

public class JedisInstance {public synchronized static Jedis getSingleJedis() {Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.auth("123456");return jedis;}
}/*** @author xuleyan* @version Seckill.java, v 0.1 2020-03-22 6:25 PM xuleyan*/
public class Seckill {// 库存keyprivate static final String redisKey = "stock";public static void main(String[] args) throws ExecutionException, InterruptedException {Seckill seckill = new Seckill();seckill.doKill();}private void doKill() throws ExecutionException, InterruptedException {// 线程池ExecutorService executorService = Executors.newFixedThreadPool(20);Jedis jedis = new Jedis();try {jedis = JedisInstance.getSingleJedis();jedis.set(redisKey, "0");jedis.close();} catch (Exception e) {e.printStackTrace();}Seckill seckill = new Seckill();for (int i = 0; i < 1000; i++) {executorService.execute(seckill::kill);}executorService.shutdown();}private String kill() {Jedis jedis1 = JedisInstance.getSingleJedis();try {// 监控redisKey,如果在执行事务的期间有改动,则事务回滚jedis1.watch(redisKey);String redisValue = jedis1.get(redisKey);int valInteger = Integer.valueOf(redisValue);String userInfo = UUID.randomUUID().toString();String message = "";// 如果没有秒完if (valInteger < 20) {// 开启事务Transaction tx = jedis1.multi();// 自增1tx.incr(redisKey);// 提交事务List list = tx.exec();if (list != null && list.size() > 0) {message = "用户:" + userInfo + ", 秒杀成功!当前成功人数:" + (valInteger + 1);System.out.println(message);} else {// 版本变化,别别人抢了message = "用户:" + userInfo + ", 秒杀失败!";System.out.println(message);}} else {// 秒完了message = "已有20人秒杀成功,秒杀结束";System.out.println(message);}return message;} catch (Exception ex) {ex.printStackTrace();return "异常";}}
}

代码运行结果:

用户:f7e78f59-a9ec-4337-a4f2-b591ab4474b5, 秒杀失败!
用户:cb7a7770-4543-465a-ba40-a9926841dd4a, 秒杀失败!
用户:6359579e-71a9-48f6-926d-bb0225fd6dd8, 秒杀失败!
用户:2e5b5d60-1b62-48cd-9d60-bdef3e77b9b9, 秒杀失败!
用户:60281d39-b5bd-47f5-b101-b0b8b13a53be, 秒杀失败!
用户:40eae4d9-ecf6-451f-8e63-c11e99a7d837, 秒杀失败!
用户:6fae9daf-09c3-4e73-8968-130946459434, 秒杀失败!
用户:b11732eb-4f95-4996-af9d-921378c8c504, 秒杀失败!
用户:ecf95ce5-1b85-49d5-ac01-eddcbe1edcf8, 秒杀成功!当前成功人数:1
用户:a51be020-87fa-4ca6-a051-5172109e6171, 秒杀失败!
用户:3e14b9ff-3982-42e5-9089-b2627efef38b, 秒杀失败!
用户:5828bccc-11b3-4758-9657-24ca6cbafb99, 秒杀失败!
用户:06c8233a-9626-4082-b5a5-feec4bfdd2fa, 秒杀失败!
用户:df2070c1-acc8-4b77-b55f-2425b5e2943d, 秒杀失败!
用户:50459dca-212e-49cc-a325-179a09dfe6f9, 秒杀失败!
用户:db09ee20-c0b5-4737-bcec-e0e4b106ea65, 秒杀失败!
用户:c1bdddb0-c1f0-43a7-b6ec-d2c4528992f7, 秒杀失败!
用户:762b3c3b-7afc-49f7-9ea7-b652494d53a3, 秒杀失败!
用户:98b13e92-c699-43c7-9098-2e035815d2b4, 秒杀失败!
用户:1778f3e6-6c24-49d0-aa99-7e26527e3e37, 秒杀失败!
用户:97ea0ca5-90ac-4c5b-960d-b17e72a293e3, 秒杀成功!当前成功人数:2
用户:d2f7c0c7-1394-483f-be27-65d033e02664, 秒杀成功!当前成功人数:3
用户:d6fc200a-44f3-4129-90d6-51189f389b91, 秒杀成功!当前成功人数:4
用户:35a4c3e1-172a-4f49-8ad8-1f31a1e2bcf1, 秒杀成功!当前成功人数:5
用户:86b74976-be2e-4d74-9349-22e5c59be955, 秒杀成功!当前成功人数:6
用户:2d781304-c5c6-4dd1-9694-3dbc90dfe3d1, 秒杀成功!当前成功人数:7
用户:bd46339f-cf60-4d21-a90e-9bcdde113c31, 秒杀成功!当前成功人数:8
用户:eb4986fa-8291-489e-8736-8b97656ea771, 秒杀成功!当前成功人数:9
用户:96b32aa6-e3a9-4f17-956f-e8e06125a394, 秒杀成功!当前成功人数:10
用户:1534bfd3-b661-4cb1-946d-8667985afe22, 秒杀成功!当前成功人数:11
用户:215c9792-1e2d-4c0f-a3e3-5935a505c9f7, 秒杀成功!当前成功人数:12
用户:e7a21430-5384-4b32-896a-02433dfbcda7, 秒杀成功!当前成功人数:13
用户:b75bec91-9e5c-4e34-8683-346ca8ff3b15, 秒杀成功!当前成功人数:14
用户:4826adaf-ac51-44f7-b484-ef2760bbb675, 秒杀失败!
用户:694f8761-73f6-405e-9f00-1a9ae4920d3b, 秒杀成功!当前成功人数:15
用户:5145aa57-7386-4cdd-81f1-60459c32651b, 秒杀失败!
用户:158d850b-8fbd-45ce-a613-2011a174e340, 秒杀失败!
用户:95768081-f78b-4a62-8595-4e9029b11f0b, 秒杀失败!
用户:aecd3138-eb50-4f18-a4ed-c1103b2fb465, 秒杀失败!
用户:20488ec5-4d79-4f42-b918-c5e8cae5ab5e, 秒杀成功!当前成功人数:16
用户:d9111248-e2b9-4559-91c5-3b82ae792deb, 秒杀成功!当前成功人数:17
用户:ab1cea6c-9cb5-4a21-a225-b78beb731dd6, 秒杀成功!当前成功人数:18
用户:f2886c5a-f11d-4dc4-961f-03c5119b0140, 秒杀成功!当前成功人数:19
用户:e5fb5414-2325-45e6-bb93-14d33d4db34d, 秒杀成功!当前成功人数:20
已有20人秒杀成功,秒杀结束
已有20人秒杀成功,秒杀结束
已有20人秒杀成功,秒杀结束
已有20人秒杀成功,秒杀结束

redis秒杀代码案例相关推荐

  1. Redis 秒杀案例

    Redis 秒杀案例 文章目录 Redis 秒杀案例 实现 ab工具模拟并发 超卖和超时问题解决 配置JedisPool连接池来解决超时问题 利用乐观锁淘汰用户,解决超卖问题 库存遗留问题解决 什么是 ...

  2. php hincrby,Thinkphp5+Redis实现商品秒杀代码实例讲解

    这篇文章主要介绍了Thinkphp5+Redis实现商品秒杀代码实例讲解,代码和步骤讲解的很清楚,有需要的同学可以借鉴参考下: 环境:wamp,redis 要求:安装WAMP,Redis,以及为PHP ...

  3. php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...

    从数据库中直接读取数据,虽然时效性很强,但是对数据库造成很大压力,尤其是在高访问量的情况下.这时候可以通过缓存,来有效的缓解了这一压力,虽然时效性有些不足,但是服务器的抗压能力却达到了很大的提高. 读 ...

  4. 保姆级redis6全流程学习和redis秒杀全流程

    文章目录 前言 一.redis解决的问题 1.1.1解决session共享问题 1.1.2降低io读操作 1.2.1nosql数据库的特点 1.2.2 NoSQL的适用场景 1.2.3 NoSQL不适 ...

  5. 30 个 php 操作 redis 常用方法代码例子

    这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类 型. list 类型和 set 类型的数据 , 需要的朋友可以 ...

  6. python大数据分析实例-python大数据分析代码案例

    #查询用户余额代码案例 import sys import MySQLdb import pandas as pd optmap = { 'dbuser' : 'aduser', 'dbpass' : ...

  7. 【分类算法】Logistic算法原理、标准评分卡开发流程、python代码案例

    [博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...

  8. ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现

    ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现 目录 分类预测评估指标之AUC计算的的两种函数代码案例实现 输出结果 实现代码

  9. Java多线程安全问题解决的两种方式代码案例

    需求:用三个线程模拟三个售票窗口,共同卖100张火车票,每个线程打印出卖第几张票. 多线程安全问题 需求:用三个线程模拟三个售票窗口,共同卖100张火车票,每个线程打印出卖第几张票. 模拟安全问题 p ...

最新文章

  1. 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
  2. 使用Microsoft.Office.Interop.Excel时,64位问题
  3. Android开发之自带阴影效果的shape
  4. [Delphi]根据输入日期按年月周日输出日期段
  5. Java 8 StampedLocks与ReadWriteLocks和同步
  6. cisco 交换机vlan-trunk的配置详解及应用实例:
  7. 在ASP.NET Web Application 中如何处理图片 【转】-有用
  8. 教程 | Hadoop集群搭建和简单应用
  9. java spring server_Java server框架之(1):spring中的IoC
  10. SpringBoot拦截器和过滤器的一起使用
  11. 《Netty实战》总结
  12. 风云再续:他抖任他抖,IO诊断在我手
  13. 缩写(三)——网络语言和缩写词
  14. 移动硬盘一个分区识别不到时候处理
  15. 美团外卖前端实习生面试总结
  16. [图文]symbian与uiq开发教程(转)
  17. C++实现有理数类加减乘除
  18. Docker容器时间与宿主机不一致?3个解决方案
  19. 华为服务器怎么查看cpu型号,华为RH2288H V2处理器性能测试_华为 FusionServer RH2288 V2_服务器评测与技术-中关村在线...
  20. 泰勒公式求极限c语言switch,泰勒公式Ç

热门文章

  1. chrome浏览器配置,地理位置模拟
  2. 80386读书笔记之保护虚拟地址存储方式(二)
  3. 如何听节拍器_二胡初学者如何使用节拍器? | 乐器教程网
  4. 【Web】html+js 制作小游戏
  5. (camtasia) 喀秋莎视频教程 素材
  6. ggplot2入门大全(从菜鸟到高手)
  7. 计算机网络能传递的信息是什么,计算机网络的功能是什么?
  8. 记录一下 KVM服务器的bbr加速
  9. 入门3D建模,没有美术基础你也可以学做人物角色面部造型 (下)
  10. 微软-2020暑期实习生招聘-笔试