秒杀系统
java实现的秒杀系统
不穿鞋的猫丶
这个作者很懒,什么都没留下…
展开
-
秒杀系统——整体流程
技术点:Thymeleaf springboot jsr303 mybatis rabbitmq redis druid 总体流程: 大并发的瓶颈:数据库。所以我们处理大并发的出发点就是怎么减少对数据库的访问,现在能够想到的就是加各种各样的缓存来减少对数据库的访问。比如页面缓存,url缓存,对象缓存,redis缓存等等 优化的方向:缓...原创 2020-03-26 12:52:53 · 1768 阅读 · 7 评论 -
秒杀系统面试
如何解决超卖问题?大致思路 1.在sql上加上判断防止数据库边界为负数 2.数据库加上唯一索引防止用户重复购买 3.redis预减库存减少数据访问,内存标记减少redis访问,请求先入队列缓冲,异步下单 具体实现? 1:将库存从mysql移到redis,将所有的写操作放到内存,由于redis不存在锁所以不会出现相互等待,并且由于redis的写性能和读性能远高于mysql,解决的性能...原创 2020-03-17 16:08:58 · 531 阅读 · 0 评论 -
秒杀系统04-订单详情(分布式锁)
还是老三步,请求先到controller,controller找对对应方法,调用方法返回结果 但是现在还有问题,假如商品只有10件,但是来了1000个订单,那么会就失效,为了处理这个问题,所以引入了分布式锁。假如没有分布式锁,这里就会产生超卖问题。 超卖问题的原因在这儿: 第一步判断是否已经抢购,一般没有,能进入,第二部,判断是否可以被秒杀,这里就有...原创 2020-02-26 10:57:27 · 539 阅读 · 0 评论 -
秒杀系统03-死信队列
假如有一条消息过期了,比如说订单虽然生成了,但是用户在指定时间内并没有完成支付,这种情况下就需要进行处理,于是就有了私信队列来专门处理这种过期的消息。死信队列也是一种队列,只是可以延迟处理消息,可以过一定的时间再被消费者消费掉,消息进入死信队列后如果经过了ttl的时间,则会真正到达真正的队列(也就是处理过期任务的队列) 接下来开始正式实现死信队列 首先是在配置类中设置好死信队列的交换...原创 2020-02-26 00:27:55 · 299 阅读 · 0 评论 -
秒杀系统02-rabbitMQ的使用
接下来就是使用rabbitMQ了 首先是引入依赖 然后是配置rabbitmq的相关信息 然后就是配置消息队列的交换机,队列,路由了: 接下来如果你想自定义消息的一些属性,那么就专门新建一个他的配置类 ...原创 2020-02-25 10:39:11 · 830 阅读 · 0 评论 -
秒杀系统01-大概框架
这是一个秒杀系统的项目实战,目的很简单,用户传入请求,即购买请求,服务端响应这个请求,然后对应的数据库减去该值。但是要保证高并发情况下还能正常运行就不是这么简单了,我们需要引入分布式锁,还有消息中间件,在mysql上还要做优化,分布式情况下要保证商品的唯一id,redis要用来实现数据缓存。其实就做这个项目就是想将自己学到的知识都整合起来 首先是最基本的不考虑高并发情况下的情形: 一:想...原创 2020-02-22 23:26:58 · 129 阅读 · 0 评论