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

我想问下比如做一个高并发的秒杀活动 如果都用了redis缓存 那啥时候做插入数据库的操作

我想问下比如做一个高并发的秒杀活动 如果都用了redis缓存 那啥时候做插入数据库的操作

智慧大石 2019-02-21 11:09:13
我想问下比如做一个高并发的秒杀活动 如果都用了redis缓存 那啥时候做插入数据库的操作比如活动进行中的时候 谁秒杀到了 都存入了缓存 那什么时候才把他们对应的奖品存数据库呢?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

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

查看完整回答
反对 回复 2019-02-21
?
慕斯709654

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

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

查看完整回答
反对 回复 2019-02-21
?
开满天机

TA贡献1786条经验 获得超12个赞

1.使用redis是为了能快速的判断被秒杀的商品是否还有库存.
2.通过判断redis数据的判断结果进行限流,减少服务器压力.
3.redis持久化到数据库的数据量很小,只要正常操作数据库就可以了.

查看完整回答
反对 回复 2019-02-21
  • 3 回答
  • 0 关注
  • 571 浏览

添加回答

举报

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