通用缓存访问框架JetCache
JetCache是由阿里巴巴开源的通用缓存访问框架,提供的核心能力包括:
- 提供统一的,类似jsr-107风格的API访问Cache,并可通过注解创建并配置Cache实例
- 通过注解实现声明式的方法缓存,支持TTL和两级缓存
- 分布式缓存自动刷新,分布式锁 (2.2+)
- 支持异步Cache API
- Spring Boot支持
- Key的生成策略和Value的序列化策略是可以定制的
- 针对所有Cache实例和方法缓存的自动统计
JetCache使用
添加maven依赖
1 2 3 4 5 | <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId> <version> 2.6 . 1 </version> </dependency> |
1 2 3 4 5 6 7 8 9 | @SpringBootApplication @EnableMethodCache (basePackages = "com.mengka.springboot.service" ) @EnableCreateCacheAnnotation public class Demo2Application { public static void main(String[] args) { SpringApplication.run(Demo2Application. class , args); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); } |
自动刷新
1 | @CacheRefresh |
加载保护,对于加载开销比较大的对象,为了防止缓存未命中时的高并发访问打爆数据库
CachePenetrationProtect注解保证当缓存未命中的时候,一个JVM里面只有一个线程去执行方法,其它线程等待结果。
1 | @CachePenetrationProtect |
接口测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗