在Spring Boot中集成Redis进行缓存

在Spring Boot中集成Redis进行缓存,主要分为以下步骤:


1. 添加依赖

pom.xml中添加Redis和缓存相关的依赖:

xml 复制代码
<!-- 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</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

2. 配置Redis连接

application.propertiesapplication.yml中配置Redis服务器信息:

properties 复制代码
# 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注解:

java 复制代码
@SpringBootApplication
@EnableCaching // 启用缓存
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4. 配置缓存管理器(可选但推荐)

自定义Redis缓存配置(如设置过期时间、序列化方式):

java 复制代码
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.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 删除缓存(常用于删除或更新操作)

示例代码:

java 复制代码
@Service
public class UserService {

    // 根据ID查询用户(结果缓存到"users"区域,key为#id)
    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        // 模拟数据库查询
        return userRepository.findById(id).orElse(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命令行检查

    bash 复制代码
    redis-cli
    > KEYS *      # 查看所有缓存键
    > GET "users::1"  # 查看key为1的用户缓存
  • 强制刷新缓存:更新数据后,检查缓存是否被清除/更新。


常见问题解决

  1. 序列化异常

    • 确保实体类实现java.io.Serializable接口。
    • 使用JSON序列化(如GenericJackson2JsonRedisSerializer)。
  2. 缓存穿透

    • 对空结果也进行短时间缓存(需自定义配置)。

    • 使用@Cacheableunless参数:

      java 复制代码
      @Cacheable(value="users", unless="#result == null")
  3. 缓存一致性

    • 更新数据库后立即清除或更新缓存(通过@CachePut/@CacheEvict)。

通过以上步骤,即可在Spring Boot中高效集成Redis实现缓存功能,显著提升应用性能。

相关推荐
爱上语文42 分钟前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
高兴达2 小时前
Spring boot入门工程
java·spring boot·后端
幽络源小助理2 小时前
SpringBoot基于JavaWeb的城乡居民基本医疗信息管理系统
java·spring boot·学习
Java初学者小白4 小时前
秋招Day15 - Redis - 缓存设计
java·数据库·redis·缓存
代码老y4 小时前
Spring Boot + 本地部署大模型实现:安全性与可靠性保障
spring boot·后端·bootstrap
RainbowSea5 小时前
补充:问题:CORS ,前后端访问跨域问题
java·spring boot·spring
都叫我大帅哥7 小时前
Redis GEO全解:从入门到精通,让你的应用“空间觉醒”
redis
都叫我大帅哥7 小时前
Redis 的 HyperLogLog:用 12KB 数清银河系星星的魔法计数器
redis
TT哇8 小时前
【Java EE初阶】计算机是如何⼯作的
java·redis·java-ee
paopaokaka_luck8 小时前
基于SpringBoot+Vue的电影售票系统(协同过滤算法)
vue.js·spring boot·后端