思维导图
🌟引入SpringDataRedis依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--如果使用springboot2.x时想要使用jedis连接池,则需要使用以下依赖配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
🌟修改配置文件
spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=123456 spring.redis.lettuce.pool.max-active = 10 spring.redis.lettuce.pool.max-idle = 10 spring.redis.lettuce.pool.min-idle = 0 spring.redis.lettuce.pool.max-wait= -1ms #指定redis客户端 spring.redis.client-type = lettuce #################jedis连接池########### spring.redis.jedis.pool.max-active = 10 spring.redis.jedis.pool.max-idle = 10 spring.redis.jedis.pool.min-idle = 0 spring.redis.jedis.pool.max-wait= -1ms #指定redis客户端为jedis spring.redis.client-type = jedis
解释:
- spring.redis.lettuce.pool.max-active:指定连接池中最大活动连接数。默认值为 10,表示连接池中最多可以同时有 10 个活动连接。
- spring.redis.lettuce.pool.max-idle:指定连接池中最大空闲连接数。默认值为 10,表示连接池中最多可以保持 10 个空闲连接。空闲连接是指当前没有被使用的连接。
- Jedis 和 Lettuce 是两种不同的 Redis 客户端库。Jedis 是基于传统的同步阻塞 I/O 模型实现的,而 Lettuce 是基于 Netty 的异步非阻塞模型实现的。在 Spring Boot 2.x 版本及以后,Lettuce 客户端取代了 Jedis 成为默认的 Redis 客户端。如果需要配置成jedis连接池
- spring.redis.lettuce.pool.min-idle:指定连接池中最小空闲连接数。默认值为 0,表示连接池中最少保持 0 个空闲连接。当空闲连接数量小于该值时,连接池会自动创建新的连接以补充。
- spring.redis.lettuce.pool.max-wait:指定获取连接的最大等待时间。默认值为 -1ms,表示当连接池中没有可用连接时,获取连接的操作将一直阻塞直到有连接可用。可以设置为一个正整数,表示最大等待时间(以毫秒为单位)。
🌟两大模板类介绍
RedisTemplate | StringRedisTemplate | |
数据类型支持 | 可以操作任意的Java对象 ,并提供了对各种Redis数据结构(如字符串、哈希、列表、集合、有序集等)的操作方法。 |
专门用于操作Redis字符串数据类型 的模板类。它的方法返回结果都是字符串类型。 |
默认序列化方式 | 默认使用JdkSerializationRedisSerializer 进行对象的序列化和反序列化,将对象转换成字节数组存储到Redis中。 |
默认使用StringRedisSerializer 进行字符串的序列化和反序列化,直接存储字符串到Redis中。 |
使用场景 | 适用于复杂的业务场景 ,需要处理多种类型的Redis数据结构或存储自定义Java对象到Redis中。 |
适用于简单的场景 ,只需要操作Redis字符串数据类型。 |
类型安全 | 由于可以操作任意的Java对象,类型安全性相对较低 ,需要开发人员手动进行类型转换。 |
由于只操作字符串数据类型,所以类型安全性相对较高 ,不需要进行类型转换。 |
- 注意:如果两者采用默认的序列化机制,则两大模板类操作的值是不互通的。
@Test void contextLoads() { redisTemplate.opsForValue().set("name3","124566"); Object name=stringRedisTemplate.opsForValue().get("name3"); System.out.println(name); } 运行结果:null
🌟序列化机制配置
有关于四大序列化机制的概括,请查看上方的思维导图!,下方配置类时修改其默认的序列化机制。
@Configuration public class RedisTemplateConfiguration { /** * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 使⽤Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置key和value的序列化规则 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // 设置hashKey和hashValue的序列化规则 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); // 设置⽀持事物 //redisTemplate.setEnableTransactionSupport(true); redisTemplate.afterPropertiesSet(); return redisTemplate; }
配置完序列化机制后,两大模板方法值互通。
@Test void contextLoads() { redisTemplate.opsForValue().set("name4","124566"); Object name=stringRedisTemplate.opsForValue().get("name4"); System.out.println(name); } 运行结果:"124566"
🌟写在最后
有关于一张思维导图带你学会SpringBoot整合Redis到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。