Springboot整合redis配置详解
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类型的数据进行操作
- 该类继承了RedisTemplate
- 知道了两种模板的区别后,我们就好选择了,如果我们需要的是对对象等实体类型或者除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配置详解相关推荐
- SpringBoot 整合 Redis 使用详解(StringRedisTemplate 和 RedisTemplate 对比分析)
背景: 最近项目采用前后端分离的架构,单点登录系统采用Redis存储用户session信息,在这里总结下springboot整合redis的详细过程,以及部分源码分析 1.前期准备 首先保证安装好re ...
- springboot2.5.0 整合 redis 配置详解
1. pom添加依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId&g ...
- Springboot多数据源配置详解
Springboot多数据源配置详解 概念 配置 多数据源使用 概念 一般来说,我们正常的业务只涉及一个数据源,在特定的业务场景中需要使用多个数据源的情况,就需要配置多个数据源来满足特定的业务需求.本 ...
- 若依(ruoyi)redis配置详解
若依(ruoyi)redis配置详解 RedisConfig RedisConfig主要是在配置RedisTemplate注册到IOC容器中 构建template,主要是设置(set): 1.Redi ...
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...
- log4j 打印线程号配置_Log4J日志整合及配置详解
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
- SpringBoot集成Redis代码详解,收藏起来
今天主要讲解Springboot整合Redis.Redis是目前使用最多的缓存,包括Spring Boot 中我们也是会用Redis做很多事情.那么今天就来说一说Spring Boot如何整合Redi ...
- Redis 配置详解 —— 全网最新最全
文章目录 一.撰文目的 二.配置详解 1. EXAMPLE(概要说明) 2.INCLUDES(配置包含) 3.MODULES(加载模块) 4.NETWORK(网络配置) 5.TLS/SSL(通讯协议) ...
- springboot整合mysql5.7_详解SpringBoot整合MyBatis详细教程
1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver 然后导入以下整合依赖 org.mybatis.spring.boo ...
最新文章
- sqlserver bulk insert
- 跟着JQuery API学Jquery 之四 css
- Arm官宣V9架构,用AI和安全对抗英特尔,最快今年年底用上
- Docker的四种网络模式和相关网络命令等操作
- AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
- 7-4 螺旋方阵 (20 分)
- c++ Static理解
- 阿里巴巴2020首发136道Java高级岗面试题(含答案)
- 利用python开发微信JS-JDK(基于python3.6)
- Linux tty远程退出,screen 如果程序没结束就退出远程管理终端
- Directx发展史
- 用ES6语法存储美国邮政编码的IndexedDB数据库
- 计算机学报在线阅读,计算机学报CHIN
- STM32单片机开发板 定制
- java打包跳过test_maven打包如何跳过测试操作的?
- oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载
- 待办事项-JavaScript实现
- android使用webview
- 全球疫苗接种状况数据分析
- Java中都是值传递 pass-by-value
热门文章
- DotA 6.70 的火凤凰 imba
- Ubuntu 命令学习一: 关机,重启
- 【经验分享】分享 MangoPapa 的论文学习经验
- JavaScript基础总结-10
- 调用线程必须为 STA,因为许多 UI 组件都需要
- 联邦学习non-iid用户数据采样python实现
- 一代“鞋王”百丽集团,在京东获得了2018飞跃品牌奖
- centos7查询mysql端口占用_Centos查看端口占用情况和开启端口命令
- mybatis注解报错总结
- java实现楼梯式效果_复式楼终于完工,效果很漂亮,楼梯这样设计太抢眼了,忍不住晒晒...