目录
- 优化重复下单
- 问题的产生:
- 需求:
- 思路:
- 代码:
- 测试:
优化重复下单
之前超卖、重复下单的解决方式
问题的产生:
比如这个秒杀活动没人去玩,只有一个人去参与秒杀,然后秒杀成功了,因为有联合索引,所以这个人他没法重复下单,但是他依然去请求秒杀,在秒杀的10个商品没被秒杀完之前,这个人的请求每次都会去数据库查这个人是否已经下单了,所以还是造成性能浪费。
因为已下单就不能再下单了,所以这个人如果下单一万次,那么这一万次请求(到数据库查询此人是否已成功下单过的操作)都会落到数据库去。
需求:
同一个人秒杀请求,不要每次都去数据库查询是否已经有下单记录
思路:
1、减少请求落到mysql的访问,让更多的请求去到 Redis 的缓存去查。
2、在用户下单成功,把数据存到数据库时,也把数据存一份到redis中,后面再controller进行判断的时候,如果有该用户的key存在redis,那么表明该用户已经下单过了,不用再去数据库查了。
代码:
1、在下单成功保存到数据库的时候,也弄一个key保存到redis中
2、在controller中判断的时候,先去redis中判断是否有对应的key,有就是说明该用户重复下单过了,抛异常提示。
测试:
成功,先走redis判断