B2C电商项目 前台首页加载模块(缓存 广告数据的实时更新缓存)
一、首页加载的解决方案
互联网应用首页访问并发量高,如何来解决?
方案
nginx + lua + redis
步骤一、缓存预热
步骤二、编写lua脚本实现二级缓存读取
实现步骤
- 后台数据管理,通过后台管理系统,对mysql中的广告(首页内容)进维护。
- 定义广告内容,表中设计了 position 位置字段 ,标识广告图片的显示位置。
- 将首页页面,通过nginx进行部署
- 通过lua脚本,对广告指定位置的数据进行以及缓存。 lua脚本就会根据位置信息,从mysql数据库中,查询出广告数据,存入到redis中。(缓存预热,只有数据库发生变更的时候,才需要执行。)
- 通过lua脚本,完成广告数据的读取。我们使用了nginx的本地缓存(二级缓存 因为nginx和redis不在一台服务器 远程调用也会产生延时)。先从nginx本地缓存中查询数据,如果没有查询到数据,那么就查询redis中数据,并存入本地缓存,设置缓存时间10分钟。
- 页面通过VUE,发送ajax请求,访问读取广告数据的lua脚本,展示数据。
采用该方案所产生的问题?
问题:
必须要先执行ad_update,缓存预热的操作,首页才会有数据。redis中才会有mysql的数据,只要管理员通过后台更新了mysql中的数据,那么预热操作就需要重新执行。如何来做?
解决方式:
-
安装了canal,进行mysql数据库修改的监听。
-
搭建了数据监控服务,通过配置,可以监听广告表的变化。
-
在数据监控服务的监听器中,获取修改的广告信息,将广告的position作为消息的内容发送MQ消息
-
运营微服务作为MQ的消费者,接收消息中的position,通过HTTP请求(OKHTTP 或者RestTemplate发请求都行),向nginx发送缓存预热的请求
http://192.168.200.128/ad_update?position=web_index_lb