Spring Boot 3 整合Redis(1) 基础功能

191 阅读2分钟

Spring Boot 3 整合Redis(1) 基础功能

随着 Spring Boot 3 的发布,开发者可以体验到更多功能提升和性能优化,其中包括与 Redis 的整合,以提升系统响应速度和减轻数据库压力。Redis 作为高性能缓存数据库,在现代开发中得到广泛应用。本文将介绍如何在 Spring Boot 3 中整合 Redis,以实现更优化的缓存和存储功能。

基础功能

项目初始化

  • 引入依赖

Spring Web:用于构建 REST API。 Spring Data Redis:用于 Redis 数据库的操作。 Spring Boot DevTools(可选):方便开发时进行热部署。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
​
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
  • 下载安装redis服务器

配置 Redis

spring:
  data:
    redis:
      host: 127.0.0.1 # Redis服务器地址
      database: 0 # Redis数据库索引(默认为0)
      port: 6379 # Redis服务器连接端口
      password: # Redis服务器连接密码(默认为空)
  • 配置 Redis 序列化

Spring Boot 默认使用 JdkSerializationRedisSerializer 进行序列化,我们可以通过配置 RedisTemplate 来使用自定义的序列化器:

/**
 * @author harry
 * @公众号 Harry技术
 */
@Configuration
@EnableCaching
public class RedisTemplateConfiguration {
​
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
​
        // key 序列化方式 采用 StringRedisSerializer
        redisTemplate.setKeySerializer(RedisSerializer.string());
        // value 序列化 采用 json 序列化
        redisTemplate.setValueSerializer(RedisSerializer.json());
​
        // hash key 序列化方式 采用 StringRedisSerializer
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // hash value 序列化方式 采用 json 序列化
        redisTemplate.setHashValueSerializer(RedisSerializer.json());
​
        // 设置数据库序列化方式
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}
  • 编写 REST 控制器 为了展示如何通过 REST API 来操作 Redis,创建一个简单的控制器RedisController,通过 GET 和 POST 请求来存取 Redis 中的数据。
/**
 * @author harry
 * @公众号 Harry技术
 */
@RestController
@RequestMapping("/api/redis")
@RequiredArgsConstructor
public class RedisController {
​
    private final RedisTemplate<String, Object> redisTemplate;
​
    // set 数据
    @PostMapping("/set")
    public String set(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
        return "ok";
    }
​
    // get 数据
    @GetMapping("/get")
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
​
    // delete 数据
    @DeleteMapping("/delete")
    public Boolean delete(String key) {
        return redisTemplate.delete(key);
    }
}

测试 API

启动 Spring Boot 应用程序,使用 curl 或 Apifox测试 API:

  • 保存数据:

curl --location --request POST 'http://localhost:8080/api/redis/set?key=harry&value=Harry技术'

image-20241128163951384

  • 获取数据:

curl --location --request GET 'http://localhost:8080/api/redis/get?key=harry'

image-20241128164017138

  • 删除数据:

curl --location --request DELETE 'http://localhost:8080/api/redis/get?key=harry'

image-20241128163922374

通过示例,我们已经学会了如何在 Spring Boot 3 和 Java 17 中整合 Redis,并利用其实现高效的缓存功能,从而显著提升应用的响应速度和性能。特别是在高并发的场景下,使用 Redis 作为缓存是一种极其有效的优化策略。

示例源码:关注公众号“Harry技术”,回复 redis 获取源码地址。