为了账号安全,请及时绑定邮箱和手机立即绑定

有没有童鞋遇到过同样的问题:插入数据库如何考虑高并发?万分感谢

有没有童鞋遇到过同样的问题:插入数据库如何考虑高并发?万分感谢

不负相思意 2019-06-12 09:00:57
我想问下比如做一个高并发的秒杀活动如果都用了redis缓存那啥时候做插入数据库的操作比如活动进行中的时候谁秒杀到了都存入了缓存那什么时候才把他们对应的奖品存数据库呢?
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

可以用队列消费异步写mysql。每次写入redis后,发送一条消息到队列中,消费者获取到消息后,通过redis获取订单信息,写入mysql。也可以设置一个定时,几分钟跑一次,拉取一次redis中的几分钟内新增的订单,写入mysql。不过这个就需要注意redis占用问题,如果设计有缺陷可能会阻塞redis。同时也要做好redis的持久化,免得redis崩溃后没有持久化的数据丢失导致订单对不上。
                            
查看完整回答
反对 回复 2019-06-12
?
守着一只汪

TA贡献1872条经验 获得超3个赞

把库存写入队列,每次请求就从队列里取值,如果有值就按正常请求处理。比如设置了100的库存,最终到数据库的就只有100个请求。100个请求不算大并发当一个请求过来时,php-fpm就创建一个进程,专门接待这个请求,直到处理完这个请求。php-fpm能同时派出很多人(进程),互不干扰。服务器处理器和内存越大,php-fpm就能派出越多的人。这个不需要php程序员操心。当然,处理器和内存一定的情况先,如果每个人的工作量越小(程序设计的越优),php-fpm就能同时派出更多的人。
                            
查看完整回答
反对 回复 2019-06-12
  • 2 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信