Springboot整合redis配置详解

1.导入依赖

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

2.编写properties或者yml配置

#Redis本地服务器地址,注意要开启redis服务,即那个redis-server.exe
spring.redis.host=127.0.0.1
#Redis服务器端口,默认为6379.若有改动按改动后的来
spring.redis.port=6379
#Redis服务器连接密码,默认为空,若有设置按设置的来
spring.redis.password=
#连接池最大连接数,若为负责则表示没有任何限制
spring.redis.jedis.pool.max-active=8
#连接池最大阻塞等待时间,若为负责则表示没有任何限制
spring.redis.jedis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
spring:redis:# Redis本地服务器地址,注意要开启redis服务,即那个redis-server.exehost: 127.0.0.1# Redis服务器端口,默认为6379.若有改动按改动后的来port: 6379#Redis服务器连接密码,默认为空,若有设置按设置的来password:jedis:pool:# 连接池最大连接数,若为负数则表示没有任何限制max-active: 8# 连接池最大阻塞等待时间,若为负数则表示没有任何限制max-wait: -1# 连接池中的最大空闲连接max-idle: 8

3.根据需要选择Redis模板

  • Redis模板分为两种,一种为RedisTemplate,一种为StringRedisTemplate
  • 如何选择取决于我们的redis存储的数据类型的需求
    • 首先我们先来讲两种模板的区别

      • RedisTemplate

        • 该模板是一个泛型类,故而该类可以对任意类型的key和value做操作
        • 该模板的序列化方式为使用JdkSerializationRedisSerializer类得到一个字节数组,反序列化得到的是一个Object类型的数据
      • StringRedisTemplate
        • 该类继承了RedisTemplate

          public class StringRedisTemplate extends RedisTemplate<String, String>
          
        • 因为该类的泛型都设定为String,所以该类只能对key和value都是String类型的数据进行操作
    • 知道了两种模板的区别后,我们就好选择了,如果我们需要的是对对象等实体类型或者除String外的基本数据类型的数据进行操作时,那么我们就选择RedisTemplate,如果对String类型的自然就使用StringRedisTemplate,我们当然也可以使用RedisTemplate操作如int之类的基本数据类型,只是需要在反序列化时应使用String类型接收即可,一切以具体需求为准。

4.模板的配置和解释

  • 因为着重讲配置,所以SpringRedisTemplate和工具类这里不做描述
  • 自定义配置类
package cn.wenhe9.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;@Configuration
public class RedisConfig extends CachingConfigurerSupport {/***  自定义RedisTemplate* @param redisConnectionFactory* @return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//大多数情况,都是选用<String, Object>RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);// 使用JSON的序列化对象,对数据key和value进行序列化转换Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);//ObjectMapper是Jackson的一个工作类,顾名思义他的作用是将JSON映射到Java对象即反序列化,或将Java对象映射到JSON即序列化ObjectMapper mapper = new ObjectMapper();// 设置序列化时的可见性,第一个参数是选择序列化哪些属性,比如时序列化setter?还是filed?h第二个参数是选择哪些修饰符权限的属性来序列化,比如private或者public,这里的any是指对所有权限修饰的属性都可见(可序列化)mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 设置出现故障即错误的类型,第一个是指验证程序,此时的参数为无需验证,其他参数可以查看源码了解(作者还在啃源码中),第二是指该类不能为final修饰,否则将会报错mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);jacksonSeial.setObjectMapper(mapper);// 设置RedisTemplate模板的序列化方式为jacksonSeialtemplate.setDefaultSerializer(jacksonSeial);return template;}/*** 自定义缓存管理器* @param redisConnectionFactory* @return*/@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {// 创建String和JSON序列化对象,分别对key和value的数据进行类型转换RedisSerializer<String> strSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper mapper = new ObjectMapper();mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);jacksonSeial.setObjectMapper(mapper);// 自定义缓存数据序列化方式和有效期限RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1))   // 设置缓存有效期为1天.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(strSerializer)) // 使用strSerializer对key进行数据类型转换.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSeial)) // 使用jacksonSeial对value的数据类型进行转换.disableCachingNullValues();   // 对空数据不操作RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();return cacheManager;}
}
  • 解释我在注释里写的很清楚,希望可以耐心的看完

Springboot整合redis配置详解相关推荐

  1. SpringBoot 整合 Redis 使用详解(StringRedisTemplate 和 RedisTemplate 对比分析)

    背景: 最近项目采用前后端分离的架构,单点登录系统采用Redis存储用户session信息,在这里总结下springboot整合redis的详细过程,以及部分源码分析 1.前期准备 首先保证安装好re ...

  2. springboot2.5.0 整合 redis 配置详解

    1. pom添加依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId&g ...

  3. Springboot多数据源配置详解

    Springboot多数据源配置详解 概念 配置 多数据源使用 概念 一般来说,我们正常的业务只涉及一个数据源,在特定的业务场景中需要使用多个数据源的情况,就需要配置多个数据源来满足特定的业务需求.本 ...

  4. 若依(ruoyi)redis配置详解

    若依(ruoyi)redis配置详解 RedisConfig RedisConfig主要是在配置RedisTemplate注册到IOC容器中 构建template,主要是设置(set): 1.Redi ...

  5. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...

  6. log4j 打印线程号配置_Log4J日志整合及配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  7. SpringBoot集成Redis代码详解,收藏起来

    今天主要讲解Springboot整合Redis.Redis是目前使用最多的缓存,包括Spring Boot 中我们也是会用Redis做很多事情.那么今天就来说一说Spring Boot如何整合Redi ...

  8. Redis 配置详解 —— 全网最新最全

    文章目录 一.撰文目的 二.配置详解 1. EXAMPLE(概要说明) 2.INCLUDES(配置包含) 3.MODULES(加载模块) 4.NETWORK(网络配置) 5.TLS/SSL(通讯协议) ...

  9. springboot整合mysql5.7_详解SpringBoot整合MyBatis详细教程

    1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver 然后导入以下整合依赖 org.mybatis.spring.boo ...

最新文章

  1. sqlserver bulk insert
  2. 跟着JQuery API学Jquery 之四 css
  3. Arm官宣V9架构,用AI和安全对抗英特尔,最快今年年底用上
  4. Docker的四种网络模式和相关网络命令等操作
  5. AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
  6. 7-4 螺旋方阵 (20 分)
  7. c++ Static理解
  8. 阿里巴巴2020首发136道Java高级岗面试题(含答案)
  9. 利用python开发微信JS-JDK(基于python3.6)
  10. Linux tty远程退出,screen 如果程序没结束就退出远程管理终端
  11. Directx发展史
  12. 用ES6语法存储美国邮政编码的IndexedDB数据库
  13. 计算机学报在线阅读,计算机学报CHIN
  14. STM32单片机开发板 定制
  15. java打包跳过test_maven打包如何跳过测试操作的?
  16. oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载
  17. 待办事项-JavaScript实现
  18. android使用webview
  19. 全球疫苗接种状况数据分析
  20. Java中都是值传递 pass-by-value

热门文章

  1. DotA 6.70 的火凤凰 imba
  2. Ubuntu 命令学习一: 关机,重启
  3. 【经验分享】分享 MangoPapa 的论文学习经验
  4. JavaScript基础总结-10
  5. 调用线程必须为 STA,因为许多 UI 组件都需要
  6. 联邦学习non-iid用户数据采样python实现
  7. 一代“鞋王”百丽集团,在京东获得了2018飞跃品牌奖
  8. centos7查询mysql端口占用_Centos查看端口占用情况和开启端口命令
  9. mybatis注解报错总结
  10. java实现楼梯式效果_复式楼终于完工,效果很漂亮,楼梯这样设计太抢眼了,忍不住晒晒...