【数据产品】基于通知机制的缓存设计

1. 背景:为什么需要做缓存?

我所做的产品的指标设计越来越复杂,查询性能也随之下降。因此需要增加缓存层, 以提高接口查询效率。

2. 哪些层需要做缓存?

随着指标系统的应用,该产品的查询逻辑也越来越简单,无非就是API层生成SQL,然后调用Metric-Server执行查询,返回ListMap,然后API层再解析成前端需要的对应数据结构。

(该服务确实经历过几次大改版,从传统的api调service再到微服务拆分成多个域,再到如今的api调metric-server的指标配置方式,整个过程真是应了那句古话:天下大势,合久必分,分久必合)

在这里插入图片描述
从上图可以看见,能做缓存的层有两个,一个是API的接口层,二是Metric-server的查询层。

我们先从底层往上做缓存,这样可复用的查询就越多。

3. 缓存的粒度?

缓存主要是减轻数据库DB的压力。

日周维度理论上是不需要缓存的,因为日周查询的数据量不会太大,其次就是日周数据每天或每七天就会发生变化,缓存命中率可能不很高,低命中率的缓存是一种资源浪费。

因此,优先考虑月季年进行缓存。

但对于日维度等频繁查询的数据也应进行缓存,比如首页概览页面等,这种页面可以考虑请求合并。

4. 缓存的数据?

因为我们现在都是一个SQL对应一个list这种查询方式,因此我们可以选择对SQL生成唯一MD5,然后对List进行缓存。

那么什么样的SQL需要缓存呢?(总结就是对数据库产生压力的sql)

一是查询慢的,二是查询次数多的。

因此,我们可以设定一个标准:

当 【查询时间 > x秒 && 查询次数 > x次 】时,进行数据缓存。

或者

当【查询次数 > x次】时,也进行缓存。

缓存的方式?

  1. 强制缓存(请求合并):对于一些概览页面,每次进入App会频繁调用,对于这部分数据,可以强制缓存。

  2. 主动缓存:对于未强制指定缓存的业务,查询慢且频繁调用,主动进行缓存。

  3. 预测缓存:对于1和2的中的SQL,如果新的表回流任务更新,则提前预测查询(这里的缓存阈值可以与1、2不同),进行缓存。

5. 缓存的方案?

在这里插入图片描述

6. 缓存的监控

缓存的监控同样也很重要,一方面是监控每天缓存情况,保证缓存正常运行;另一方面,监控redis数据库容量,保证不被打满,设置合理的缓存阈值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值