SpringBoot整合Redis(Lettuce)

版权声明:本文为CSDN博主「她的坏机器人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42193813/article/details/109742921

一、Jedis和Lettuce的区别

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

二、Springboot集成 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,spring,boot,redis,后端)