1.这里使用maven 管理jar包,所以pom中引入依赖,此处注意 spring-boot-starter-data-redis
引用的大版本号应和所依赖的spring-boot-starter-parent
大版本号相同,即:spring-boot-starter-parent
版本为 2.3.x
,spring-boot-starter-data-redis
版本号也为 2.3.x
否则会引出类缺失异常
<!--整合redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--对象池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.然后在application.yml文件里配置redis
spring:
redis:
# Redis数据库索引(默认为0)
database: 0
#数据库ip地址
host: 127.0.0.1
#数据库端口 默认为6379
port: 6379
#数据库密码
password: 123456
lettuce:
pool:
#连接池最大连接数默认8 负数表示无限制
max-active: 8
#连接池最大阻塞等待时间 默认值-1 负数表示无限制
max-wait: -1
#连接池最大空闲连接 默认8
max-idle: 8
#连接池最小空闲连接 默认0
min-idle: 0
这里我是用lettuce客户端,未使用Jedis 二者 区别如下:
1、Jedis 是直连模式,在多个线程间共享一个 Jedis 实例时是线程不安全的,
每个线程都去拿自己的 Jedis 实例,当连接数量增多时,物理连接成本就较高了
2、Lettuce的连接是基于Netty的,连接实例可以在多个线程间共享,如果你不知道Netty也没事,大致意思就是一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。通过异步的方式可以让我们更好地利用系统资源。
附注:若想详细了解Lettuce 可以看这篇文章 https://www.cnblogs.com/throwable/p/11601538.html
3.配置RedisTemplate序列化, SpringBoot集成Redis后,使用redis存储Object,redis默认的序列化器在写入key或value时会以二进制的形式存储,不方便我们日常观察他的key和value,我们自定义一个RedisTemplate,设置序列化器,这样我们可以很方便的操作实例对象,默认情况下RedisTemplate模板只能支持字符串。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
MyRedisSerializer myRedisSerializer=new MyRedisSerializer();
//key序列化方式
template.setKeySerializer(new StringRedisSerializer());
//value序列化
template.setValueSerializer(new StringRedisSerializer());
//value hashmap序列化
template.setHashValueSerializer(new StringRedisSerializer());
return template;
}
}