【SpringBoot】SpringBoot整合Redis(Lettuce)

Jedis和Lettuce的区别

  • Lettuce 和 Jedis 的都是连接Redis Server的客户端
  • Jedis是直接连接Redis Server,在多线程环境下是非线程安全的,只有使用连接池
  • Lettuce是基于Netty实现,是线程安全的
  • 在SpringBoot 1.5.x版本默认的Redis客户端是Jedis实现的,SpringBoot 2.x版本默认客户端是用lettuce实现的

以下步骤为SpringBoot整合Lettuce版的Redis

1、导入依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
    <version>2.3.5.RELEASEversion>
dependency>
<dependency>
    <groupId>org.apache.commonsgroupId>
    <artifactId>commons-pool2artifactId>
    <version>2.9.0version>
dependency>

2、配置application.yml

  • 创建SpringBoot工程默认是application.propertis,但推荐使用.yml文件,所以我将其修改为.yml文件

  • SpringBoot默认会加载application.propertis或者application.yml,两种都可识别

spring:
  redis:
    database: 0
    host: 192.168.229.11
    port: 6379
    password: 123456 # 如果没有密码,可以不写
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
    timeout: 2000

3、编写配置类

  • 因为默认的模板只能存储字符串类型的,所以我们需要自定义RedisTemplate,满足可以存放更多类型的数据
@Configuration
public class LettuceRedisConfig {

    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }

}

4、创建工具类

@Component
public class RedisUtils {

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 设置key-value
     * @param key 键
     * @param value 值
     */
    public void set(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 设置带生存时间的key-value
     * @param key 键
     * @param value 值
     * @param timeout 生存时间
     * @param unit 时间单位
     */
    public void set(String key, String value, long timeout, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, value, timeout, unit);
    }
    
    /**
     * 设置指定数据的生存时间。
     *
     * @param key 键
     * @param time 生存时间(秒)
     */
    public void expire(String key, long time) {
        redisTemplate.expire(key, time, TimeUnit.SECONDS);
    }
    
    /**
     * 根据key,获取值
     * @param key 键
     * @return 获取到的值
     */
    public String get(String key) {
        return String.valueOf(redisTemplate.opsForValue().get(key));
    }

    /**
     * 删除指定信息。
     *
     * @param key 键
     * @return 是否删除成功
     */
    public boolean delete(String key) {
        return redisTemplate.delete(key);
    }
}

5、使用

// 在需要的类中引用
@Resource
private RedisUtils redisUtils;


// 然后在需要的地方使用
redisUtils.set(phone, phoneCode, 60, TimeUnit.SECONDS);

执行之后,可以通过Redis的图形化工具(Redis Desktop Manager)查询添加的结果

你可能感兴趣的:(SpringBoot,java,redis,spring,spring,boot,spring,5)