Spring Boot 使用 Redis

145 阅读1分钟

一、引入依赖

pom.xml 中引入 Redis 依赖。

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

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
</dependency>

二、redis 配置

application.yml中配置 Redis 参数。

spring:
  redis:
    # 云胡腾讯云 redis
    host: 127.0.0.1
    port: 6379
    timeout: 1000

    lettuce:
      pool:
        max-active: 20
        min-idle: 5
        max-wait: 5000ms
        max-idle: 20

三、通过 RedisTemplate 使用 redis

如果是本地测试,记得把 Redis 服务器启动,否则会无法连接。

@SpringBootTest
class LearnredisApplicationTests {
    @Autowired
    private RedisTemplate<String, String> strRedisTemplate;

    /**
     * 测试 Redis 字符串
     */
    @Test
    public void testRedisString() {
        ValueOperations ops = strRedisTemplate.opsForValue();
        ops.set("name", "yunhu");
        System.out.println(strRedisTemplate.opsForValue().get("name")); // output: yunhu
    }
}

四、自定义 RedisTemplate

默认的 RedisTemplate 只能处理字符串,通过设置序列化器,可以方便的操作实例对象。

4.1 新建实体类

一个类只要实现了 Serializable就可以将其持续地序列化保存。

@Data
public class UserEntity implements Serializable {
    private Long id;
    private String userName;
    private String userSex;
}

4.2 设置自定义 RedisTemplate

@Configuration
public class RedisConfig {

    /**
     * 设置序列化
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        // key 采用 String 的序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

4.3 测试自定义 RedisTemplate

@SpringBootTest
class LearnredisApplicationTests {
    @Autowired
    private RedisTemplate<String, Serializable> serializableRedisTemplate;

    /**
     * 测试 Redis 序列化对象
     */
    @Test
    public void testSerializable() {
        UserEntity user = new UserEntity();
        user.setId(1L);
        user.setUserName("yunhu");
        user.setUserSex("male");
        ValueOperations ops = serializableRedisTemplate.opsForValue();
        ops.set("currentUser", user);
        UserEntity resultUser = (UserEntity) ops.get("currentUser");
        System.out.println("user:" + resultUser.getId()+"," + resultUser.getUserName() + "," + resultUser.getUserSex());
        // output: user:1,yunhu,male
    }
}