autoCache
介绍
autoCache是一个Java轻量级的二级缓存组件,对业务零侵入,可大幅提升系统性能、开发效率和代码整洁。
软件架构
autoCache采用二级缓存的设计,一级缓存(L1)为内存缓存,内存容量小,性能高; 二级缓存(L2)为远程缓存,又称集中缓存,相对内存速度稍低,但容量更大、扩展性更强、更易于维护。
缓存技术选型,L1使用当下流行的caffeine,L2集中缓存使用Redis,可继续扩展三方缓存组件。
简化接入设计,基于Spring boot体系,实现引入即用,摒弃传统手动注入Bean,配置AOP切面的方式。
简化使用设计,基于注解方式,实现对业务零侵入,摒弃代码声明侵入方式,与业务耦合。
基本要求
- JDK 1.8+
 - Spring boot 2.0+
 - Redis
 - 添加maven依赖,直接从中央仓库拉取
 
<dependency>
  <groupId>io.github.haozi2015</groupId>
  <artifactId>autocache-spring-boot-starter</artifactId>
  <version>1.0.2</version>
</dependency> 
使用说明
@AutoCache 自动缓存注解,二级缓存优先级:本地缓存 > 远程缓存 > 回源
    // 本地缓存,5秒过期
    @AutoCache(localTTL = 5)
    public Teacher getTeacher(Long id) {
        return new Teacher();
    }
    // 远程缓存,30秒过期
    @AutoCache(remoteTTL = 30)
    public Teacher getTeacher2(Long id) {
        return new Teacher();
    }
    // 二级缓存,本地5秒,远程30秒
    @AutoCache(localTTL = 5, remoteTTL = 30)
    public Teacher getTeacher3(Long id) {
        return new Teacher();
    }
 
@AutoCache 自动缓存注解,key支持Spring Expression Language (SpEL)解析表达式
    @AutoCache(localTTL = 5, key = "#id+'-'+#name")
    public Teacher getTeacher(Long id,String name) {
        return new Teacher();
    }
 
@AutoCache注解elementCache为true时,支持集合元素的缓存,并回源miss部分的元素
    // 缓存集合元素,List方式
    @AutoCache(localTTL = 5, elementCache = true)
    public List<Teacher> getTeacher(List<Long> ids) {
        return Arrays.asList(new Teacher());
    }
    // 缓存集合元素,Map方式
    @AutoCache(localTTL = 5, elementCache = true)
    public Map<Long,Teacher> getTeacher2(List<Long> ids) {
        return new HashMap<>();
    }
 
@AutoCacheEvict自动清除缓存注解,清除缓存需声明cacheName缓存名称
    @AutoCacheEvict(cacheName = "teacher", key = "#teacher.id")
    public Integer update(Teacher teacher) {
        return 1;
    }
 
完整代码,参考demo。
TODO
- 主动加载缓存功能
 - 监控,访问量、命中率、miss率等
 - 内存缓存,单节点清理后,其它节点的一致性问题
 - 发现,发现系统哪些方法访问量高,耗时较长