库存使用Redis的string类型进行存储
下单人使用Redis的set类型进行存储,set类型中数据不可重复
1.将优惠券数据存放到Redis中,通过Lua脚本实现对库存是否充足,用户是否下单,以及扣减库存的操作,Lua脚本时原子性的,要么成功,要么失败。
2.开启异步线程,将数据存入数据库中,并发性能提高,秒杀耗时减少
什么是阻塞队列
在数据结构中,队列遵循FIFO(先进先出)原则。在java中,Queue接口定义了定义了基本行为,由子类完成实现,常见的队列有ArrayDeque、LinkedList等,这些都是非线程安全的,在java 1.5中新增了阻塞队列,当队列满时,添加元素的线程呈阻塞状态;当队列为空时,获取元素的线程呈阻塞状态。
优化思路
①先利用Redis完成库存余量、一人一单判断,完成抢单业务
②再将下单业务放入阻塞队列,利用独立线程异步下单
基于阻塞队列的异步秒杀存在哪些问题?
●内存限制问题
●数据安全问题
标签:异步,队列,Redis,阻塞,线程,下单,秒杀 From: https://blog.51cto.com/AmbitionGarden/8044257