前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用缓存预热方案设计

应用缓存预热方案设计

作者头像
方丈的寺院
发布2022-05-25 09:22:58
8930
发布2022-05-25 09:22:58
举报
文章被收录于专栏:方丈的寺院方丈的寺院

背景

随着业务的发展,微服务越来越多,缓存相关的场景也比较多,通常的做法是基于缓存数据库(如redis),client来进行缓存操作。这样的问题有两个

  1. 如果更换缓存数据库改造成本比较高
  2. 对于批量查缓存、缓存穿透等场景没有统一实现,逻辑分散

所以需要一个统一的缓存框架。

另外针对一些活动、大促场景需要对缓存数据进行预热。所以需要设计一套通用的预热系统。所谓预热,其实就是提前请求数据,使缓存生效。缓存和预热有关联,但是可以设计成独立的两套系统。

缓存框架

目标是实现

  1. 去除样板代码
代码语言:javascript
复制
getDataWithCache(Long id) {
 val data = getFromCache(id);
 // 缓存没有,从数据库中拿
 if (data == null) {
  data  = getFromDb(id);
  putDataInfoCache();
 }
}
  1. 屏蔽掉缓存的具体实现,缓存有本地缓存(guava cache),分布式缓存(redis,memcache),实现方式不同,但是对于业务无需感知
  2. 支持缓存穿透、缓存击穿、级联缓存、批量查询缓存场景
  3. 能够监控到缓存命中率

实现分析

在这里插入图片描述

API 层

提供一些annotation给开发者使用

解析层

解析annotation,生成对应的缓存操作API

缓存操作SPI

屏蔽掉具体的缓存数据库实现

缓存操作层

具体的缓存数据库实现,如redis,memcache

开源的实现

https://docs.spring.io/spring-framework/docs/3.1.x/spring-framework-reference/html/cache.html

目前有spring-cache的实现,大部分需要的功能都能提供,不过也存在一些劣势

  1. 不支持多级缓存,批量查询缓存
  2. 和公司内部的监控,全链路trace没有打通。

所以通常可以借鉴spring-cache思路,结合公司的基础组件,自研一套。具体实现逻辑见github

预热系统

预热系统其实就是三步

  1. 构造数据 支持excel,离线表,等多种数据导出成特定格式的参数
  2. 提交任务 提交调用待预热接口的方法,有个任务中心即可
  3. 执行 任务中心的任务调度

所以主要是搭建一个数据构造模块,再基于公司已有的任务执行中心即可实现。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 方丈的寺院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 缓存框架
    • 实现分析
      • API 层
      • 解析层
      • 缓存操作SPI
      • 缓存操作层
    • 开源的实现
    • 预热系统
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档