B2C电商项目 前台首页加载模块(缓存 广告数据的实时更新缓存)

一、首页加载的解决方案

互联网应用首页访问并发量高,如何来解决?

方案

nginx + lua + redis

步骤一、缓存预热

B2C电商项目 前台首页加载模块(缓存 广告数据的实时更新缓存)

步骤二、编写lua脚本实现二级缓存读取

B2C电商项目 前台首页加载模块(缓存 广告数据的实时更新缓存) 

实现步骤

  1. 后台数据管理,通过后台管理系统,对mysql中的广告(首页内容)进维护。
  2. 定义广告内容,表中设计了 position 位置字段 ,标识广告图片的显示位置。
  3. 将首页页面,通过nginx进行部署
  4. 通过lua脚本,对广告指定位置的数据进行以及缓存。 lua脚本就会根据位置信息,从mysql数据库中,查询出广告数据,存入到redis中。(缓存预热,只有数据库发生变更的时候,才需要执行。)
  5. 通过lua脚本,完成广告数据的读取。我们使用了nginx的本地缓存(二级缓存 因为nginx和redis不在一台服务器 远程调用也会产生延时)。先从nginx本地缓存中查询数据,如果没有查询到数据,那么就查询redis中数据,并存入本地缓存,设置缓存时间10分钟。
  6. 页面通过VUE,发送ajax请求,访问读取广告数据的lua脚本,展示数据。

采用该方案所产生的问题?

问题:
​ 必须要先执行ad_update,缓存预热的操作,首页才会有数据。redis中才会有mysql的数据,只要管理员通过后台更新了mysql中的数据,那么预热操作就需要重新执行。如何来做?

B2C电商项目 前台首页加载模块(缓存 广告数据的实时更新缓存)

解决方式:

  1. 安装了canal,进行mysql数据库修改的监听。

  2. 搭建了数据监控服务,通过配置,可以监听广告表的变化。

  3. 在数据监控服务的监听器中,获取修改的广告信息,将广告的position作为消息的内容发送MQ消息

  4. 运营微服务作为MQ的消费者,接收消息中的position,通过HTTP请求(OKHTTP 或者RestTemplate发请求都行),向nginx发送缓存预热的请求

    http://192.168.200.128/ad_update?position=web_index_lb