⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 juejin.cn/post/7244734132323221563 「最爱小熊」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

一.JetCache的基本概念

1.JetCache是由阿里巴巴 Group 开源的一款基于 Spring 和 Redis 的分布式缓存框架。它的主要特点包括:

  • 基于注解: 通过注解的方式来实现缓存的配置和使用,代码简洁,易于维护。
  • 多级缓存: 支持多级缓存,可以将数据缓存在本地内存、Redis、Tair、Memcached 等多种缓存存储中,提高缓存的命中率和查询效率。
  • 多种缓存协议: 支持 Redis、Tair、Memcached 等多种缓存协议,具有良好的可扩展性和兼容性,可以灵活切换缓存存储方式。
  • 高性能: JetCache 针对分布式环境下的高并发访问优化了缓存的数据结构和查询算法,提供了较高的性能。
  • 易用性: JetCache 的 API 简单易用,支持 Spring 注入和自定义配置,提供了丰富的缓存操作功能,非常适合中小型应用开发。

2.JetCache 可以应用于各种场景,主要包括:

  • 热点数据缓存: JetCache 可以将常用的热点数据缓存在本地或远程缓存中,减少数据库或其他数据源的访问,并提高响应性能和性能稳定性。
  • 多级缓存融合: JetCache 支持多种缓存存储类型,可以将不同的缓存存储类型融合使用,以达到更高的缓存效率和命中率。
  • 高并发读写: JetCache 的缓存算法可以优化高并发读写场景,提高程序性能并降低系统压力。
  • 高速访问查询: JetCache 使用缓存,可以实现高速查询和访问,减少等待时间,并提高用户体验。

二.JetCache 的 API 和使用:

  • 缓存管理: JetCache 提供了 CacheBuilder 类来创建缓存,以及 Cache 对象来操作缓存,例如 get、put、remove 等。在调用 Cache 对象的 put 方法时,可以使用注解 @Cache 来设置缓存时间和名称等配置。
  • 注解支持: JetCache 提供了多种注解来实现缓存操作,例如 @Cached,@CacheUpdate, @CacheInvalidate 等。使用注解的方式,可以更加方便地进行缓存操作,例如缓存预热、删除、更新等。
  • 缓存类型: JetCache 支持多种缓存类型,例如本地 memory、Redis、Tair 和 Memcached 等缓存,可以根据业务需求来选择缓存类型。
  • Spring 集成支持: JetCache 提供了 Spring 集成支持,可以通过注解来注入和配置缓存,简化使用流程。

三、SpringBoot整合JetCache

1.导入依赖

<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>3.0.1</version>
</dependency>

2.配置yml

jetcache:
remote:
type: redis
# 修改远程缓存名称
default:
#redis地址
servers: 127.0.0.1:6379
#redis中的db索引,默认为0
database: 0
#redis的密码,如果没有密码则不需要配置
password:
#连接redis的超时时间(单位:毫秒)
connectTimeout: 5000
#操作redis的超时时间(单位:毫秒)
timeout: 5000
#redis连接池最大连接数
maxTotal: 100
# 如果你使用了redis集群
cluster:
servers: "127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381"
#redis集群的密码,如果没有密码则不需要配置
password:
#jedisCluster连接池最大连接数
maxTotal: 100
local:
# 本地缓存元素最大数量
default:
limit: 10000
# 如果你想重写某个缓存的配置
myCache:
limit: 100

@Cached注解和@CreateCache的属性非常类似,但是多几个:

3.启动类注解

@EnableMethodCache(basePackages = "")

4.示例代码

@Service
public class UserServiceImpl implements UserService {

@Autowired
private UserRepository userRepository;

@Cache(name = "userCache", key = "#userId", expire = 300)
@Override
public User getUserById(Long userId) {
return userRepository.getUserById(userId);
}

@CacheUpdate(name = "userCache", key = "#user.id")
@Override
public void updateUser(User user) {
userRepository.update(user);
}

@CacheInvalidate(name = "userCache", key = "#userId")
@Override
public void deleteUser(Long userId) {
userRepository.deleteUser(userId);
}
}

这和SpringCache很像,不过@Cached注解原生支持了TTL(超时时间),cacheType有LOCAL/REMOTE/BOTH三种选择, 分别代表本地内存/远程Cache Server(例如Redis)/两级缓存,可根据情况选用,合理的使用LOCAL或BOTH类型可以降低Cache Server的压力以及我们提供的服务的响应时间。

文章目录
  1. 1. 一.JetCache的基本概念
  2. 2. 二.JetCache 的 API 和使用:
  3. 3. 三、SpringBoot整合JetCache