SpringBoot中集成Redis进行缓存的实现
目录
- 1. 添加依赖
- 2. 配置Redis连接
- 3. 启用缓存功能
- 4. 配置缓存管理器(可选但推荐)
- 5. 在Service层使用缓存注解
- 6. 验证缓存效果
- 常见问题解决
在Spring Boot中集成Redis进行缓存,主要分为以下步骤:
1. 添加依赖
在pom.XML
中添加Redis和缓存相关的依赖:
<!-- Spring Boot Redis Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 可选:对象序列化支持(如Jackson) --> <dependency> <groupId>com.fasterxml.jackson.core<android/groupId> <artifactId>jackson-databind</artifactId> </dependency>
2. 配置Redis连接
在application.properties
或application.yml
中配置Redis服务器信息:
# Redis基础配置 spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= # 若无密码则留空 spring.redis.database=0 # 连接池配置(可选) spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.min-idle=0
3. 启用缓存功能
在启动类上添加@EnableCaching
注解:
@SpringBootApplication @EnableCaching // 启用缓存 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
4. 配置缓存管理器(可选但推荐)
自定义Redis缓存配置(如设置过期时间、序列化方式):
import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.chttp://www.devze.comontext.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.serializer.GenericJackson2jsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; @Configuration @EnableCaching public class RedisCacheConfig { @Bean public RedisCacheConfiguration cacheConfiguration() { return RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(10)) // 默认缓存过期时间:10分钟 .disableCachingNullValues() // 不缓存null值 .serializeValuesWith( RedisSerializationContext.SerializationPair.fromSerializer( new GenericJackson2JsonRedisSerializer() // 使用JSON序列化 ) ); } }
5. 在Service层使用缓存注解
在需要缓存的方法上添加Spring Cache注解:
注解 | 作用 |
---|---|
@Cacheable | 查询时优先读缓存,无缓存则执行方法并保存结果 |
@CachePut | 每次执行方法并更新缓存(常用于更新操作) |
@CacheEvict | 删除缓存(常用于删除或更新操作) |
示例代码:
@Service public class UserService { // 根据ID查询用户(结果缓存到"users"区域,key为#id) @Cacheable(value = "users", key = "#id") public User getUserById(Long id) { // 模拟数据库查询 return userRepository.findById(id).orElsandroide(null); } // 更新用户信息(同时更新缓存) @CachePut(value = "users", key = "#user.id") public User updateUser(User user) { return userRepository.save(user); } // 删除用户(同时移除缓存) @CacheEvict(value = "users", key = "#id") public void deleteUser(Long id) { userRepository.deleteById(id); } // 清除"users"区域所有缓存(如批量更新后) @CacheEvict(value = "users", allEntries = true) public void clearAllUserCache() {} }
6. 验证缓存效果
观察日志:首次查询会访问数据库,后续相同请求不会打印SQL。
Redis命令行检查:
redis-cli > KEYS * # 查看所有缓存键 > G编程客栈ET "users::1" # 查看key为1的用户缓存
强制刷新缓存:更新数据后,检查缓存是否被清除/更新。
常见问题解决
序列化异常:
- 确保实体类实现
Java.io.Serializable
接口。 - 使用JSON序列化(如
GenericJackson2JsonRedisSerializer
)。
- 确保实体类实现
缓存穿透:
- 对空结果也进行短时间缓存(需自定义配置)。
- 使用
@Cacheable
的unless
参数:@Cacheable(value="users", unless="#result == null")
缓存一致性:
- 更新数据库后立即清除或更新缓存(通过
@CachePut
/@CacheEvict
)。
- 更新数据库后立即清除或更新缓存(通过
通过以上步骤,即可在Spring Boot中高效集成Redis实现缓存功能,显著提升应php用性能。
到此这篇关于SpringBoot中集成Redis进行缓存的实现的文章就介绍到这了,更多相关SpringBoot集成Redis缓存内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论