查看: 77|回复: 3
收起左侧

秒杀业务

[复制链接]

1

主题

9

帖子

39

积分

新手上路

Rank: 1

积分
39
发表于 2017-12-6 23:11:02 | 显示全部楼层 |阅读模式
飞哥,我最近这个问题困扰我很久了。我打算弄个秒杀业务模块,SSM结构的工程。我打算用activeMQ来实现高并发。我遇到一个问题,就是一个Controller发一个消息在队列中,我使用了事务。但是,我后台有大概2000个线程在处理。后台处理时,因为秒杀主要就看库存够不够的问题,所以,有很大一部分秒杀请求,是无法购买成功的,这个时候我希望跳个页面给客户,但是,Controller执行完发消息,就完了。怎么才能让客户知道,自己是否购买成功呢?如果用redis做库存的话,怎么能防止同一个客户的重复秒杀呢?我这里用的是数据库的联合主键,来防止重复秒杀的。飞哥,如果问题描述的不清楚,我希望可以单独聊聊。因为这个问题,困扰我很久,我对大数据处理和并发编程的能力很欠缺,求指导!!!飞哥。。。。
回复

使用道具 举报

546

主题

656

帖子

3148

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

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

使用道具 举报

1

主题

9

帖子

39

积分

新手上路

Rank: 1

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

秒杀成功或者失败都可 ...

这个问题我明白了!主要还有三个问题。
第一个问题:在不能分库分表的情况下,如果一个数据库的数据量有几百万条,查询效率很低,而且这个数据的数据每天都是增长的,且增长的非常快,这就不太适合做索引那该怎么办?
第二个问题:用mycat分库分表用主键求余的方式得到这条数据改进哪个库,如果某天我要扩容,那么求余的话的顺序就不对了。这样的话会不会影响查询?如果影响的话,我该怎么办?
第三个问题:mysql复合索引使用的注意事项有哪些?
飞哥,求助,这些问题我都不太懂
回复 支持 反对

使用道具 举报

546

主题

656

帖子

3148

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3148
发表于 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'; 不会触发


      
回复 支持 反对

使用道具 举报

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

本版积分规则

  • 打开微信扫一扫