随着业务的发展,微服务越来越多,缓存相关的场景也比较多,通常的做法是基于缓存数据库(如redis),client来进行缓存操作。这样的问题有两个
所以需要一个统一的缓存框架。
另外针对一些活动、大促场景需要对缓存数据进行预热。所以需要设计一套通用的预热系统。所谓预热,其实就是提前请求数据,使缓存生效。缓存和预热有关联,但是可以设计成独立的两套系统。
目标是实现
getDataWithCache(Long id) {
val data = getFromCache(id);
// 缓存没有,从数据库中拿
if (data == null) {
data = getFromDb(id);
putDataInfoCache();
}
}
在这里插入图片描述
提供一些annotation给开发者使用
解析annotation,生成对应的缓存操作API
屏蔽掉具体的缓存数据库实现
具体的缓存数据库实现,如redis,memcache
https://docs.spring.io/spring-framework/docs/3.1.x/spring-framework-reference/html/cache.html
目前有spring-cache的实现,大部分需要的功能都能提供,不过也存在一些劣势
所以通常可以借鉴spring-cache思路,结合公司的基础组件,自研一套。具体实现逻辑见github
预热系统其实就是三步
所以主要是搭建一个数据构造模块,再基于公司已有的任务执行中心即可实现。