我想问下比如做一个高并发的秒杀活动 如果都用了redis缓存 那啥时候做插入数据库的操作比如活动进行中的时候 谁秒杀到了 都存入了缓存 那什么时候才把他们对应的奖品存数据库呢?
3 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
可以用队列消费异步写mysql。每次写入redis后,发送一条消息到队列中,消费者获取到消息后,通过redis获取订单信息,写入mysql。
也可以设置一个定时,几分钟跑一次,拉取一次redis中的几分钟内新增的订单,写入mysql。不过这个就需要注意redis占用问题,如果设计有缺陷可能会阻塞redis。
同时也要做好redis的持久化,免得redis崩溃后没有持久化的数据丢失导致订单对不上。
ABOUTYOU
TA贡献1812条经验 获得超5个赞
把库存写入队列,每次请求就从队列里取值,如果有值就按正常请求处理。比如设置了100的库存,最终到数据库的就只有100个请求。
100个请求不算大并发 当一个请求过来时, php-fpm 就创建一个进程,专门接待这个请求,直到处理完这个请求。php-fpm 能同时派出很多人(进程),互不干扰。
服务器处理器和内存越大,php-fpm就能派出越多的人。这个不需要php程序员操心。当然,处理器和内存一定的情况先,如果每个人的工作量越小(程序设计的越优),php-fpm就能同时派出更多的人。
梦里花落0921
TA贡献1772条经验 获得超6个赞
1.使用redis是为了能快速的判断被秒杀的商品是否还有库存.
2.通过判断redis数据的判断结果进行限流,减少服务器压力.
3.redis持久化到数据库的数据量很小,只要正常操作数据库就可以了.
添加回答
举报
0/150
提交
取消