我就是奇迹

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

@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

  • 内部用的是 RedisTemplateStringRedisTemplate

 

 


 

 

💡 举例:

 

@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

 

 

posted on 2025-05-05 19:42  我就是奇迹  阅读(30)  评论(0)    收藏  举报