Springboot整合redis如何配置
Springboot整合redis如何配置
本文小编为大家详细介绍“Springboot整合redis如何配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“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.exespring.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
StringRedisTemplate
该模板是一个泛型类,故而该类可以对任意类型的key和value做操作
该模板的序列化方式为使用JdkSerializationRedisSerializer类得到一个字节数组,反序列化得到的是一个Object类型的数据
该类继承了RedisTemplate
publicclassStringRedisTemplateextendsRedisTemplate<String,String>
因为该类的泛型都设定为String,所以该类只能对key和value都是String类型的数据进行操作
首先我们先来讲两种模板的区别
知道了两种模板的区别后,我们就好选择了,如果我们需要的是对对象等实体类型或者除String外的基本数据类型的数据进行操作时,那么我们就选择
RedisTemplate
,如果对String类型的自然就使用StringRedisTemplate,我们当然也可以使用RedisTemplate
操作如int之类的基本数据类型,只是需要在反序列化时应使用String类型接收即可,一切以具体需求为准。
4.模板的配置和解释
因为着重讲配置,所以SpringRedisTemplate和工具类这里不做描述
自定义配置类
packagecn.wenhe9.config;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.springframework.cache.annotation.CachingConfigurerSupport;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.cache.RedisCacheConfiguration;importorg.springframework.data.redis.cache.RedisCacheManager;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.RedisSerializationContext;importorg.springframework.data.redis.serializer.RedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;importjava.time.Duration;@ConfigurationpublicclassRedisConfigextendsCachingConfigurerSupport{/***自定义RedisTemplate*@paramredisConnectionFactory*@return*/@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryredisConnectionFactory){//大多数情况,都是选用<String,Object>RedisTemplate<String,Object>template=newRedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);//使用JSON的序列化对象,对数据key和value进行序列化转换Jackson2JsonRedisSerializer<Object>jackson2JsonRedisSerializer=newJackson2JsonRedisSerializer<Object>(Object.class);//ObjectMapper是Jackson的一个工作类,顾名思义他的作用是将JSON映射到Java对象即反序列化,或将Java对象映射到JSON即序列化ObjectMappermapper=newObjectMapper();//设置序列化时的可见性,第一个参数是选择序列化哪些属性,比如时序列化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);returntemplate;}/***自定义缓存管理器*@paramredisConnectionFactory*@return*/@BeanpublicRedisCacheManagercacheManager(RedisConnectionFactoryredisConnectionFactory){//创建String和JSON序列化对象,分别对key和value的数据进行类型转换RedisSerializer<String>strSerializer=newStringRedisSerializer();Jackson2JsonRedisSerializerjacksonSeial=newJackson2JsonRedisSerializer(Object.class);ObjectMappermapper=newObjectMapper();mapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);jacksonSeial.setObjectMapper(mapper);//自定义缓存数据序列化方式和有效期限RedisCacheConfigurationconfig=RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1))//设置缓存有效期为1天.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(strSerializer))//使用strSerializer对key进行数据类型转换.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSeial))//使用jacksonSeial对value的数据类型进行转换.disableCachingNullValues();//对空数据不操作RedisCacheManagercacheManager=RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();returncacheManager;}}
读到这里,这篇“Springboot整合redis如何配置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
vue动态添加删除输入框(springboot vue怎么让数据库显示出来)
springbootvue怎么让数据库显示出来?一般情况下是前端调阅后端接口,来获取到数据库的数据,后端哪里会把数据库的数据整理...
-
php如何让Swoole/Pool进程池实现Redis持久连接
php如何让Swoole/Pool进程池实现Redis持久连接本篇...
-
php操作redis大全记录
php连接redis测试˂?php$redis=newRedis();$redis-˃conne...
-
PHP经典高级工程师面试题
1.PHP如何实现不用自带的cookie函数为客户端下发cookie。对于分布式系统,如何来保存session值...
-
PHP操作Redis数据库
-
php利用redis防止商品超发来限制抢购,简单又实用
-
php如何实现秒杀功能?php+redis模拟简单抢购场景,快来看看吧
-
PHP高级工程师面试题
-
Laravel结合Redis发送邮箱验证码
-
使用redis缓存实现多服务器PHP sessions共享