@Cacheable / @CacheEvict
✅ @Cacheable/ @CacheEvict是 Spring Cache 的注解,默认使用的是 RedisTemplate 吗?
✔ 回答:是的,
如果你使用的是 Spring Boot + Redis 配置,并且开启了缓存机制,那这些注解默认是基于 RedisTemplate 实现的缓存操作。
🔍 背后原理
当你引入:
<dependency>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
并在配置中启用缓存:
@EnableCaching
@Configuration
public class CacheConfig {
}
那么 Spring 会默认使用:
-
RedisCacheManager
-
内部用的是 RedisTemplate 或 StringRedisTemplate
💡 举例:
@Cacheable(cacheNames = "user", key = "#id")
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
@CacheEvict(cacheNames = "user", key = "#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
这些缓存行为,默认底层就是通过 RedisTemplate 调用 Redis 的 GET / SET / DEL。
✅ 如果你改用 Redisson,可以取代 RedisTemplate 吗?
可以!只要你配置 RedissonSpringCacheManager 作为缓存管理器。
配置方式:
@Bean
public CacheManager cacheManager(RedissonClient redissonClient) {
return new RedissonSpringCacheManager(redissonClient);
}
然后你 @Cacheable、@CacheEvict 这类注解依然能用,但背后的实现就不再是 RedisTemplate,而是 Redisson 提供的缓存机制(支持 TTL、最大容量、可同步等功能)。
✅ 总结
|
使用注解 |
默认使用什么 |
是否可替换为 Redisson |
|---|---|---|
|
@Cacheable / @CacheEvict |
默认用 RedisTemplate(通过 Spring 的 RedisCacheManager) |
✅ 可以改为用 RedissonCacheManager |
浙公网安备 33010602011771号