SpringBoot整合Redis

前提知识

和操作Mysql数据库一个套路
在这里插入图片描述

整合

引入依赖

注意:
1、SpringBoot默认Lettuce作为Redis客户端,所以starter-data-redis会顺便把Lettuce引入
2、starter-data-redis默认不使用连接池,所以要使用连接池就得引入其默认的commons-pool2连接池

  <!--redis SpringBoot2.0默认采用Lettuce客户端来连接Redis服务端的-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
  </dependency>

  <!--使用commons-pool2作为lettuce客户端与redis之间的连接池-->
  <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
  </dependency>

yaml配置

SpringBoot的redis客户端依赖默认不使用连接池,所以要使用连接池就需要配置一下,这样redis客户端就知道找commons-pool2(默认的连接池)获取连接了

Spring:
  #Redis 服务器地址
  redis:
    host: 192.168.43.207
    #Redis 服务器连接端口
    port: 6379
    #Redis 登录密码
    password: ******
    #Redis 数据库索引(默认为 0)
    database: 0
    #连接超时时间(毫秒)
    timeout: 1800000

  #设置Redis客户端(操作Redis数据库的)
    client-type: lettuce #lettuce是默认客户端
    

  #使用连接池:Redis客户端使用连接池操作Redis更好
  #注意:1.默认是不使用连接池的,配置了连接池才会去使用连接池
  #     2. Redis的默认连接池是commons-pool2(需要单独引入依赖)
    #连接池最大连接数(使用负值表示没有限制)
    lettuce.pool.max-active: 20
    #最大阻塞等待时间(负数表示没限制)
    lettuce.pool.max-wait: -1
    #连接池中的最大空闲连接
    lettuce.pool.max-idle: 5
    #连接池中的最小空闲连接
    lettuce.pool.min-idle: 0

RedisTemplate配置

1、可以不配置,直接使用SpringBoot提供的原生RedisTemplate<Object, Object>

2、还有个SpringRedisTemplate就相当于RedisTemplate<String, String>

3、RedisTemplate对五种数据类型的操作:

  • redisTemplate.opsForValue();//操作字符串
  • redisTemplate.opsForHash();//操作hash
  • redisTemplate.opsForList();//操作list
  • redisTemplate.opsForSet();//操作set
  • redisTemplate.opsForZSet();//操作有序set
/**
 * @Author: xiang
 * @Date: 2021/4/28 18:31
 */
@Configuration
@EnableCaching
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key 序列化方式
        template.setKeySerializer(redisSerializer);
        //value 序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap 序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
                Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间 600 秒
        RedisCacheConfiguration config =
                RedisCacheConfiguration.defaultCacheConfig()
                        .entryTtl(Duration.ofSeconds(600))
                        .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                        .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                        .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }

}

📱验证码实例使用Redis


更改客户端为Jedis

这就得自己引入依赖了

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>${jedis.version}</version>
</dependency>

redis配置声明client-type: jedis

1、将Lettuce换成Jedis就可以了
2、注意还是用commons-pool2连接池

   #默认lettuce是客户端,所以jedis必须要声明一下
    client-type: jedis
    #连接池最大连接数(使用负值表示没有限制)
    jedis.pool.max-active: 20
    #最大阻塞等待时间(负数表示没限制)
    jedis.pool.max-wait: -1
    #连接池中的最大空闲连接
    jedis.pool.max-idle: 5
    #连接池中的最小空闲连接
    jedis.pool.min-idle: 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值