1.添加一个队列模拟商品列表 启动redis 输入 rpush str 1 2 3 4 5 6 7 8 9 10
2.利用多线程模拟 20 个人抢购这 10 件商品:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * 通过Redis队列的原子操作实现秒杀 */ public class RedisSpike { public static void main(String[] args) { // redis的队列操作是原子操作 // eg: 20个人抢10个商品 // lpush productlist 1 2 3 4 5 6 7 8 9 10 商品ID号 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(10); jedisPoolConfig.setMaxWaitMillis(10000); jedisPoolConfig.setMaxTotal(1024); JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379); //或者java代码lpush进去 //String str[]= {"1","2","3","4","5","6","7","8","9","10"}; //Jedis client = jedisPool.getResource(); //client.lpush("str",str ); ExecutorService executor = Executors.newFixedThreadPool(30); for (int i = 0; i < 20; i++) { executor.execute(new SpikeTask(i, jedisPool)); } executor.shutdown(); } } class SpikeTask implements Runnable { private int customerId; private JedisPool jedisPool; public SpikeTask (int customerId, JedisPool jedisPool) { this.customerId = customerId; this.jedisPool = jedisPool; } @Override public void run() { // 执行秒杀 Jedis client = jedisPool.getResource(); String productId = client.lpop("str"); if (productId != null && productId.length() != 0) { System.out.println("顾客" + customerId + "抢到了" + productId + "号商品"); } else { System.out.println("顾客" + customerId + "没有抢到商品"); } } }
3.秒杀结果:
相关推荐
分布式Redis原子操作示例,近期项目中遇到分布式项目中多节点大并发操作redis同一个key。此案例利用java调用LUA脚本实现redis操作的原子性。分享出来大家参考。
资源微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单知识分享
07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-...
基于mq和redis实现的秒杀系统基于mq和redis实现的秒杀系统
redis实现分布式锁,自旋式加锁,lua原子性解锁
php队列+php-redis队列+php-redis扩展,php入队出队,redis入队出队以及其php .dll扩展
Laravel7中Redis队列的使用
redis分布式锁实现抢单秒杀,模拟场景,在多用户的情况下进行秒杀抢单,实现库存的变化,一级抢单返回状态。
Qt 使用 Redis实现 消息队列,点对点 生产者-消费者 模式
通过redis队列实现的消息队列
java redis使用之利用jedis实现redis消息队列.docx
Thinkphp6 redis队列 消息事件 gatewayworker聊天打通版
PHP中利用redis实现消息队列处理高并发请求思路详解.rar
整个延迟队列由4个部分组成: 1. JobPool用来存放所有Job的元信息。 2. DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job Id)。 3. Timer负责实时扫描各个Bucket,并将delay...
Serve 基于Swoole Server 编写的消息队列消费系统
java使用DelayQueue延迟队列和Redis缓存实现订单自动取消功能
redis的sorted set实现延时队列
利用redis rightPop 和 redis stream 实现消息队列
SpringBoot中利用Redis实现消息队列,代码亲测可用, 可以传输字符串,或java对象都可以