# autoCache **Repository Path**: source/autoCache ## Basic Information - **Project Name**: autoCache - **Description**: 【缓存】可大幅提升系统性能。为降低使用难度,提升开发效率,可使用#autoCache自动缓存# - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2021-02-22 - **Last Updated**: 2021-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # autoCache #### 介绍 `autoCache`是一个Java轻量级的二级缓存组件,对业务零侵入,可大幅提升系统性能、开发效率和代码整洁。 #### 软件架构 `autoCache`采用**二级缓存**的设计,一级缓存(L1)为内存缓存,内存容量小,性能高; 二级缓存(L2)为远程缓存,又称集中缓存,相对`内存`速度稍低,但容量更大、扩展性更强、更易于维护。 缓存**技术选型**,L1使用当下流行的caffeine,L2集中缓存使用Redis,可继续扩展三方缓存组件。 简化**接入**设计,基于Spring boot体系,实现引入即用,摒弃传统手动注入Bean,配置AOP切面的方式。 简化**使用**设计,基于注解方式,实现对业务零侵入,摒弃代码声明侵入方式,与业务耦合。 #### 基本要求 1. JDK 1.8+ 2. Spring boot 2.0+ 3. Redis 4. 添加maven依赖,直接从中央仓库拉取 ```xml io.github.haozi2015 autocache-spring-boot-starter 1.0.4 ``` #### 使用说明 `@AutoCache` 自动缓存注解,二级缓存优先级:本地缓存 > 远程缓存 > 回源 ```java // 本地缓存,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)解析表达式 ```java @AutoCache(localTTL = 5, key = "#id+'-'+#name") public Teacher getTeacher(Long id,String name) { return new Teacher(); } ``` `@AutoCache`注解`elementCache`为true时,支持集合元素的缓存,并回源miss部分的元素 ```java // 缓存集合元素,List方式 @AutoCache(localTTL = 5, elementCache = true) public List getTeacher(List ids) { return Arrays.asList(new Teacher()); } // 缓存集合元素,Map方式 @AutoCache(localTTL = 5, elementCache = true) public Map getTeacher2(List ids) { return new HashMap<>(); } ``` `@AutoCacheEvict`自动清除缓存注解,清除缓存需声明`cacheName`缓存名称 ```java @AutoCacheEvict(cacheName = "teacher", key = "#teacher.id") public Integer update(Teacher teacher) { return 1; } ``` 完整代码,参考demo。 #### TODO 1. 主动加载缓存功能 2. 监控,访问量、命中率、miss率等 3. 内存缓存,单节点清理后,其它节点的一致性问题 4. 发现,发现系统哪些方法访问量高,耗时较长