一. Spring Boot整合Redis实现
1. Redis简介
Redis是一个缓存,消息中间件及具有丰富特性的键值存储系统。Spring Boot为Redis的客户端Jedis提供了自动配置实现,Spring Data Redis提供了在它之上的抽象,spring-boot-starter-redis'Starter'为我们提供了必要的依赖。
2. 环境配置
- Springboot 2.2.5;
- Redis 3.2.x;
- Redis可视化工具Redis Desktop Manager
3. 创建web项目
我们按照之前的经验,创建一个web程序,并将之改造成Spring Boot项目,具体过程略。
4. 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--使用默认的Lettuce时,若配置spring.redis.lettuce.pool则必须配置该依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<!--解决jdk1.8中新时间API的序列化时出现com.fasterxml.jackson.databind.exc.InvalidDefinitionException的问题-->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
5. 添加yml配置文件
SpringBoot集成Redis主要是使用RedisTemplate类进行操作,但是在SpringBoot2.0以后,底层默认访问的不再是Jedis而是lettuce。
5.1 jedis客户端和lettuce客户端的区别
- jedis采用的是直连redis server,在多线程之间公用一个jedis实例,是线程不安全的。想要避免线程不安全,可以使用连接池pool,这样每个线程单独使用一个jedis实例。但是线程过多时,带来的是redis server的负载较大,有点类似BIO模式。
- lettuce采用netty连接redis server,实例在多个线程间共享,不存在线程不安全的情况,这样可以减少线程数量。当然在特殊情况下,lettuce也可以使用多个实例,有点类似NIO模式。
5.2 yml配置文件
spring:
datasource:
username: root
password: syc
url: jdbc:mysql://localhost:3306/db4?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
jpa:
show-sql: true
hibernate:
ddl-auto: update
redis:
host: 127.0.0.1
port: 6379
password:
timeout: 3600ms #超时时间
lettuce: #若是在配置中配置了lettuce的pool属性,那么必须在pom.xml文件中加入commons-pool2的依赖。
pool:
max-active: 8 #最大连接数
max-idle: 8 #最大空闲连接 默认8
max-wait: -1ms #默认-1 最大连接阻塞等待时间
min-idle: 0 #最小空闲连接
# jedis:
# pool:
# max-active: 8 #最大连接数
# max-idle: 8 #最大空闲连接 默认8
# max-wait: -1ms #默认-1 最大连接阻塞等待时间
# min-idle: 0 #最小空闲连接
6. 创建RedisConfig配置类
6.1 RedisTemplate自动装配
在SpringBoot中,已经自动帮我们在容器中生成了一个RedisTemplate和一个StringRedisTemplate。
下面是SpringBoot中关于RedisTemplate自动装配的源码:
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@