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

我想问下比如做一个高并发的秒杀活动 如果都用了redis缓存 那啥时候做插入数据库的操作
比如活动进行中的时候 谁秒杀到了 都存入了缓存 那什么时候才把他们对应的奖品存数据库呢?

智慧大石
浏览 575回答 3
3回答

慕慕森

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

慕斯709654

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

开满天机

1.使用redis是为了能快速的判断被秒杀的商品是否还有库存.2.通过判断redis数据的判断结果进行限流,减少服务器压力.3.redis持久化到数据库的数据量很小,只要正常操作数据库就可以了.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java