前提知识
整合
引入依赖
注意:
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