redis实现秒杀demo
Redis 实现 Demo 秒杀
2023-09-14 08:59:55 时间
代码
package com.prosay.redis; import java.util.List; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class SaleRunable implements Runnable{ String productKey="iphone8";//监视的key 当前秒杀商品的数量 Jedis jedis = new Jedis("localhost"); String userName; public SaleRunable(String userName){ this.userName = userName; } @Override public void run(){ //商品的key , 秒杀有个数量 //watch 监视一个key,当事务执行之前这个key发生了改变,事务会被打断 jedis.watch(productKey); String value = jedis.get(productKey); int num = Integer.valueOf(value); //这次秒杀的商品是100个iphone8 if(num<=100&&num>=1){ //开启事务 Transaction tx = jedis.multi(); //减少一个商品数量 tx.incrBy(productKey, -1); //提交事务,如果商品数量发生了改动 则会返回null List<Object> list = tx.exec(); if(list==null || list.size()==0){ System.out.println(userName+"商品抢购失败!"); }else{ for(Object success : list){ System.out.println(userName+"("+success.toString()+")商品抢购成功,当前抢购成功的人数是:"+(1-(num-100))); } } }else{ System.out.println(userName+"商品已经被抢完了"); } jedis.close(); } }
测试
package com.prosay.redis; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import redis.clients.jedis.Jedis; public class TestMs { public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); jedis.set("iphone8","100"); jedis.close(); //玩多线程 ExecutorService executor = Executors.newFixedThreadPool(20); for(int i = 0 ; i < 1000; i++){ executor.execute(new SaleRunable("user"+i)); } executor.shutdown(); } }
转自:https://blog.csdn.net/lzh657083979/article/details/77917088
相关文章
- ASP.NET Core WebApi基于Redis实现Token接口安全认证
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
- Redis 事件简述
- Redis学习(2)-redis安装
- 前后端项目部署-5, flask+Gunicorn+gevent+supervisor+nginx+redis+mysql+mongodb,docker-compose部署
- Redis常用数据类型介绍、使用场景及其操作命令
- 使用Nginx Lua实现redis高性能http接口
- redis 简单整理——慢查询[八]
- spring boot:redis+lua实现生产环境中可用的秒杀功能(spring boot 2.2.0)
- Java Demo示例:实现动态编译的demo
- Redis 单机部署redis实例
- redis持久化实现原理
- Redis分布式锁加时效和不加时效两种方案的最全代码实现
- SAP系统和微信集成的系列教程之七:使用Redis存储微信用户和公众号的对话记录
- [Bug]redis问题解决(MISCONF Redis is configured to save RDB snapshots)
- 学习Spring-Session+Redis实现session共享
- python使用redis第一节、环境配置
- 〖Python 数据库开发实战 - Python与Redis交互篇⑤〗- 利用 redis-py 实现哈希数据类型的常用指令操作
- redis加入到Windows系统服务
- Redis实现主从复制(Master&Slave)
- 001-redis安装、window版、mac上集群安装
- redis_05 _ 内存快照:宕机后,Redis如何实现快速恢复
- Redis源码剖析--列表t_list实现
- 基于SpringBoot+Redis实现缓存消息验证
- redis单线程原理___Redis为何那么快-----底层原理浅析
- JAVA SSM框架+Redis 实现单点登录
- 【Linux系列】Linux查看Redis版本信息