通用缓存访问框架JetCache
JetCache是由阿里巴巴开源的通用缓存访问框架,提供的核心能力包括:
- 提供统一的,类似jsr-107风格的API访问Cache,并可通过注解创建并配置Cache实例
- 通过注解实现声明式的方法缓存,支持TTL和两级缓存
- 分布式缓存自动刷新,分布式锁 (2.2+)
- 支持异步Cache API
- Spring Boot支持
- Key的生成策略和Value的序列化策略是可以定制的
- 针对所有Cache实例和方法缓存的自动统计
JetCache使用
添加maven依赖
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>2.6.1</version>
</dependency>
@SpringBootApplication
@EnableMethodCache(basePackages = "com.mengka.springboot.service")
@EnableCreateCacheAnnotation
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
public interface UserService {
//配置一级缓存
@Cached(name="userCache-", key="#userId", expire = 60)
//缓存30秒钟自动刷新,从getUserById方法取一次,如果key在600秒内没有访问则不再自动刷新
@CacheRefresh(refresh = 30, stopRefreshAfterLastAccess = 600, timeUnit = TimeUnit.SECONDS)
//当缓存访问未命中的情况下,对并发进行的加载行为进行保护,同一个JVM中同一个key只有一个线程去加载,其它线程等待结果
@CachePenetrationProtect
User loadUser(long userId);
//更新缓存
@CacheUpdate(name="userCache-", key="#user.id", value="#user")
User updateUser(User user);
//删除缓存
@CacheInvalidate(name="userCache-", key="#userId")
void deleteUser(long userId);
}
自动刷新
@CacheRefresh
加载保护,对于加载开销比较大的对象,为了防止缓存未命中时的高并发访问打爆数据库
CachePenetrationProtect注解保证当缓存未命中的时候,一个JVM里面只有一个线程去执行方法,其它线程等待结果。
@CachePenetrationProtect
接口测试
@GetMapping("world")
public ResponseEntity<String> world() {
log.info("-------, 调用hello接口");
User user1 = userService.loadUser(1001);
User updateUser = new User();
updateUser.setName("mp444xxx");
updateUser.setId(1001L);
userService.updateUser(updateUser);
User user2 = userService.loadUser(1001);
userService.deleteUser(1001L);
User user3 = userService.loadUser(1001);
return ResponseEntity.ok("Hello World");
}
参考文档
【1】https://github.com/alibaba/jetcache/blob/master/introduce_CN.md
【2】https://blog.csdn.net/zhuyu19911016520/article/details/106951358
浙公网安备 33010602011771号