一.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的特点十分类似,可是多几个:
特点 | 默认值 | 描述 |
---|---|---|
cacheName | “” | 缓存称号 |
area | “default” | 缓存区域 |
key | “” | 缓存的键 |
condition | “” | 缓存条件,需求经过 Spring EL 表达式的方式传入 |
unless | “” | 缓存排除条件,需求经过 Spring EL 表达式的方式传入 |
sync | false | 是否运用同步形式 |
sourceAvailable | false | 缓存数据源是否存在 |
cacheNullValue | false | 是否缓存 null 值 |
cacheValue | true | 是否缓存返回值 |
expire | -1 | 缓存过期时刻,单位为秒 |
expireExpression | “” | 缓存过期时刻表达式 |
keyConvertor | “” | 缓存键转换器 |
serialPolicy | “” | 缓存值序列化战略 |
areaInKey | false | 缓存中是否包括缓存区域 |
areaInRegion | false | 缓存区域是否独立,即缓存区域是否区别不同实例 |
postCondition | “” | 缓存后置条件 |
suppressException | false | 是否疏忽反常 |
localLimit | -1 | 本地缓存大小限制 |
cacheType | “” | 缓存类型,例如 caffeine、redis 等 |
conditionSatisfiedByValue | false | 是否依据缓存值来计算缓存条件,而不是办法参数 |
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的压力以及我们供给的服务的响应时刻。