查看: 5714|回复: 4
打印 上一主题 下一主题
收起左侧

秒杀业务

[复制链接]

566

主题

713

帖子

3827

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3827
楼主
发表于 2017-12-11 08:58:03 | 显示全部楼层
秒杀业务这块,你可以先把用户的秒杀请求写入队列,然后根据你的规则读取秒杀请求。

秒杀成功或者失败都可以跳转页面的,跳转一下就好,发完消息,不能跳到一个页面吗?让用户等待之类的也行,然后处理完成之后直接在页面显示就好了。

redis做库存的问题,你在前端用消息队列控制,让用户的请求不能重复就好。

抱歉,这几天比较忙,回复比较慢。你这个问题还没处理好,到时候,可以发下到我邮箱,我看看。
回复 支持 反对

使用道具 举报

566

主题

713

帖子

3827

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3827
沙发
发表于 2017-12-17 13:41:59 | 显示全部楼层
黑马CJ 发表于 2017-12-15 22:34
这个问题我明白了!主要还有三个问题。
第一个问题:在不能分库分表的情况下,如果一个数据库的数据量有几 ...

1、不太适合做索引,可以做读写分离的配置
2、mycat扩容的,可以看看这两篇文章:用的一致性hash算法搞的
                    http://blog.csdn.net/ydyang1126/ ... ionNum=11&fps=1
                    http://blog.csdn.net/wangshuang1631/article/details/69055958
3、使用复合索引注意事项:
             举个例子:触发复合索引【联合】条件(name,address)--必须有优先查询索引列
                    select * from person where name=’11’;  会触发索引
                    select * from person wherer name = '11' and address = '22'; 会触发
                    select * from person wherer name = '11' or address = '22'; 不会触发
                    select * from person wherer address = '22'; 不会触发


      
回复 支持 反对

使用道具 举报

566

主题

713

帖子

3827

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3827
板凳
发表于 2020-5-26 22:15:39 | 显示全部楼层
秒杀解决方案

秒杀
        高并发
        高可用

高并发:

- 分布式服务、负载均衡、集群
- 保证单个服务的QPS足够高
- 必须尽可能减少单个业务执行时间

订单业务:

- 业务复杂,执行链路较长
- 跨越服务较多
- 写和读操作频繁
执行效率低,并发差
解决思路:减少业务执行时间
- 读操作:加缓存
- 写操作:变同步写为异步写
整个下单业务都变成异步写。
  

用户请求到达 ---> 先预减库存 ---> 发送一条MQ消息 ---> 返回用户结果
MQ的作用:流量削峰

订单业务,监听MQ,执行下单操作。

核心的预减库存:利用Redis存储库存,在Redis中完成减库存操作



redis如何保证减库存的线程安全?

- 乐观锁方案:Redis事务,watch num;
- Redis的Lua脚本:原子性



前端问题:

- 页面的静态化:动静结合(部分动态数据,依然异步加载)
- 客户端缓存:304,页面缓存在客户端
- Nginx解析缓存:
- 土豪(RMB玩家):CDN服务,html、js、css、image
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 打开微信扫一扫