Spring Boot 项目整合 Redis

65 阅读2分钟

Redis 的常用 Java 客户端:

  • Jedis
  • Lettuce
  • Spring Data Redis

本文使用 Spring Data Redis。

1、导入依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
     <version>3.4.0</version>
 </dependency>

2、配置 Redis 数据源

 spring:
   redis:
     host: localhost
     port: 6379
     password: 123456
     database: 0 # 默认数据库0,Redis服务启动后默认有16个数据库,编号分别是从0到15

3、编写 Redis 相关配置类

 @Configuration
 @Slf4j
 public class RedisConfiguration {
     @Bean
     public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
         log.info("开始创建Redis模板对象...");
         RedisTemplate redisTemplate = new RedisTemplate();
         //设置Redis连接工厂对象
         redisTemplate.setConnectionFactory(redisConnectionFactory);
         //设置Redis键的序列化类
         redisTemplate.setKeySerializer(new StringRedisSerializer());
         return redisTemplate;
     }
 }

4、使用

本例中使用 Redis 缓存菜品数据,只列出 Controller 层代码。

 @RestController
 @RequestMapping("/user/dish")
 @Slf4j
 @Api(tags = "C端-菜品浏览接口")
 public class DishController {
     @Autowired
     private DishService dishService;
     @Autowired
     private RedisTemplate redisTemplate;
 ​
     /**
      * 根据分类id查询菜品
      * @param categoryId
      * @return
      */
     @GetMapping("/list")
     @ApiOperation("根据分类id查询菜品")
     public Result<List<DishVO>> list(Long categoryId) {
         // 查看是否有缓存数据,如果有,就不用去查数据库了
         ValueOperations valueOperations = redisTemplate.opsForValue();
         String key = "dish_" + categoryId;
         List<DishVO> dishVOList = (List<DishVO>) valueOperations.get(key);
         if (dishVOList != null && dishVOList.size() > 0) {
             return Result.success(dishVOList);
         }
 ​
         Dish dish = new Dish();
         dish.setCategoryId(categoryId);
         dish.setStatus(StatusConstant.ENABLE); // 查询起售中的菜品
 ​
         List<DishVO> list = dishService.listWithFlavor(dish);
 ​
         // 把查询出来的菜品数据存入缓存
         valueOperations.set(key, list);
 ​
         return Result.success(list);
     }
 }

其它小知识,看看即可

Spring Boot 项目中,激活特定环境的配置,如下是激活dev环境的配置:

application.yml

 spring:
   profiles:
     active: dev # SpringBoot会根据这一配置加载对应环境的专属配置,此处是dev环境
   redis:
     host: ${redis.host}
     port: ${redis.port}
     password: ${redis.password}
     database: ${redis.database}

application-dev.yml:这里的配置就是dev环境的专属配置

 redis:
   host: localhost
   port: 6379
   password: 123456
   database: 0 # 默认数据库0,Redis服务启动后默认有16个数据库,编号分别是从0到15

作用与机制:

  1. 环境隔离

    Spring Boot 通过Profile机制实现多环境配置的隔离。例如,开发(dev)、测试(test)、生产(prod)环境可能使用不同的数据库地址、端口等参数。spring.profiles.active指定激活的环境后,系统会自动加载对应环境的配置文件(如application-dev.yml),避免手动切换配置的繁琐

  1. 配置加载优先级

    当设置了spring.profiles.active: dev时:

    • 主配置文件(application.yml)中的公共配置会被保留;
    • 同时加载application-dev.yml中的专属配置,同名属性会覆盖主配置