Spring Boot 2.X(六):Spring Boot 集成 Redis

Redis 简介

什么是 Redis

Redis 是目前使用的非常广泛的免费开源内存数据库,是一个高性能的 key-value 数据库。

Redis 与其他 key-value 缓存(如 Memcached )相比有以下三个特点:

1.Redis 支持数据的持久化,它可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
3.Redis 支持数据的备份,即 master-slave 模式的数据备份。

Redis 优势如下:

1.性能极高。Redis 能读的速度是 110000 次 /s,写的速度是 81000 次 /s。
2.丰富的数据类型。Redis 支持二进制案例的 Strings,Lists,Sets 及 Ordered Sets 数据类型操作。
3.原子性。Redis 所有的操作都是原子性的,意思是要么成功执行要么失败完全不执行。单个操作是原子性的,多个操作也是,通过 MULTI 和 EXEC 指令抱起来。
4.丰富的特性。Redis 还支持 publish/subscribe,通知,key 过期等特性。

Spring Boot 集成 Redis

1. 在项目中添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.9.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>cn.zwqh</groupId>
	<artifactId>spring-boot-redis</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-boot-redis</name>
	<description>spring-boot-redis</description>
<span class="hljs-tag">&lt;<span class="hljs-name">properties</span>&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">java.version</span>&gt;</span>1.8<span class="hljs-tag">&lt;/<span class="hljs-name">java.version</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">properties</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">dependencies</span>&gt;</span>

	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-web<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>

	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-test<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">scope</span>&gt;</span>test<span class="hljs-tag">&lt;/<span class="hljs-name">scope</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>

	<span class="hljs-comment">&lt;!-- Redis --&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-data-redis<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>

<span class="hljs-tag">&lt;/<span class="hljs-name">dependencies</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">build</span>&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">plugins</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">plugin</span>&gt;</span>
			<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
			<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
		<span class="hljs-tag">&lt;/<span class="hljs-name">plugin</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">plugins</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">build</span>&gt;</span>

</project>

查看 jar 包时发现,Spring Data Redis 下 org.springframework.data.redis.connection 包路径下面默认有两个包 jedis 和 lettuce,这说明 Spring Boot 已经默认包装适配了这两个 Redis 客户端。

在 springboot 1.5.x 版本的默认的 Redis 客户端是 Jedis 实现的,springboot 2.x 版本中默认客户端是用 lettuce 实现的。

Lettuce 与 Jedis 比较

LettuceJedis 的都是连接 Redis Server 的客户端。

Jedis 在实现上是直连 redis server,多线程环境下非线程安全,除非使用连接池,为每个 redis 实例增加物理连接。


Lettuce 是 一种可伸缩,线程安全,完全非阻塞的 Redis 客户端,多个线程可以共享一个 RedisConnection, 它利用 Netty NIO 框架来高效地管理多个连接,从而提供了异步和同步数据访问方式,用于构建非阻塞的反应性应用程序。


下面我们分别使用 Lettuce 和 Jedis 来集成 Redis 服务

2. Lettuce 集成 Redis 服务

导入依赖

由于 Spring Boot 2.X 默认集成了 Lettuce ,所以无需导入。

application.properties 配置文件

################ Redis 基础配置 ##############
# Redis 数据库索引(默认为 0)
spring.redis.database=0  
# Redis 服务器地址
spring.redis.host=127.0.0.1
# Redis 服务器连接端口
spring.redis.port=6379  
# Redis 服务器连接密码(默认为空)
spring.redis.password=zwqh
# 链接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
################ Redis 线程池设置 ##############
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

自定义 RedisTemplate

默认情况下的模板只能支持 RedisTemplate<String,String>,只能存入字符串,很多时候,我们需要自定义 RedisTemplate ,设置序列化器,这样我们可以很方便的操作实例对象。如下所示:

@Configuration
public class LettuceRedisConfig {
<span class="hljs-meta">@Bean</span>
<span class="hljs-keyword">public</span> RedisTemplate&lt;String, Serializable&gt; <span class="hljs-title function_">redisTemplate</span><span class="hljs-params">(LettuceConnectionFactory connectionFactory)</span> {
	RedisTemplate&lt;String, Serializable&gt; redisTemplate = <span class="hljs-keyword">new</span> <span class="hljs-title class_">RedisTemplate</span>&lt;&gt;();
	redisTemplate.setKeySerializer(<span class="hljs-keyword">new</span> <span class="hljs-title class_">StringRedisSerializer</span>());
	redisTemplate.setValueSerializer(<span class="hljs-keyword">new</span> <span class="hljs-title class_">GenericJackson2JsonRedisSerializer</span>());
	redisTemplate.setConnectionFactory(connectionFactory);
	<span class="hljs-keyword">return</span> redisTemplate;
}

}

序列化实体类

public class UserEntity implements Serializable {
<span class="hljs-comment">/**
 * 
 */</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-type">long</span> <span class="hljs-variable">serialVersionUID</span> <span class="hljs-operator">=</span> <span class="hljs-number">5237730257103305078L</span>;

<span class="hljs-keyword">private</span> Long id;
<span class="hljs-keyword">private</span> String userName;
<span class="hljs-keyword">private</span> String userSex;
<span class="hljs-keyword">public</span> Long <span class="hljs-title function_">getId</span><span class="hljs-params">()</span> {
	<span class="hljs-keyword">return</span> id;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setId</span><span class="hljs-params">(Long id)</span> {
	<span class="hljs-built_in">this</span>.id = id;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getUserName</span><span class="hljs-params">()</span> {
	<span class="hljs-keyword">return</span> userName;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setUserName</span><span class="hljs-params">(String userName)</span> {
	<span class="hljs-built_in">this</span>.userName = userName;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getUserSex</span><span class="hljs-params">()</span> {
	<span class="hljs-keyword">return</span> userSex;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setUserSex</span><span class="hljs-params">(String userSex)</span> {
	<span class="hljs-built_in">this</span>.userSex = userSex;
}

}

单元测试


@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootRedisApplicationTests {
<span class="hljs-meta">@Autowired</span>
<span class="hljs-keyword">private</span> RedisTemplate&lt;String, String&gt; strRedisTemplate;
<span class="hljs-meta">@Autowired</span>
<span class="hljs-keyword">private</span> RedisTemplate&lt;String, Serializable&gt; serializableRedisTemplate;

<span class="hljs-meta">@Test</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">testString</span><span class="hljs-params">()</span> {
	strRedisTemplate.opsForValue().set(<span class="hljs-string">"strKey"</span>, <span class="hljs-string">"zwqh"</span>);
	System.out.println(strRedisTemplate.opsForValue().get(<span class="hljs-string">"strKey"</span>));
}

<span class="hljs-meta">@Test</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">testSerializable</span><span class="hljs-params">()</span> {
	UserEntity user=<span class="hljs-keyword">new</span> <span class="hljs-title class_">UserEntity</span>();
	user.setId(<span class="hljs-number">1L</span>);
	user.setUserName(<span class="hljs-string">"朝雾轻寒"</span>);
	user.setUserSex(<span class="hljs-string">"男"</span>);		
	serializableRedisTemplate.opsForValue().set(<span class="hljs-string">"user"</span>, user);		
	<span class="hljs-type">UserEntity</span> <span class="hljs-variable">user2</span> <span class="hljs-operator">=</span> (UserEntity) serializableRedisTemplate.opsForValue().get(<span class="hljs-string">"user"</span>);
	System.out.println(<span class="hljs-string">"user:"</span>+user2.getId()+<span class="hljs-string">","</span>+user2.getUserName()+<span class="hljs-string">","</span>+user2.getUserSex());
}

}

执行结果如下:

得到我们预期的结果。

3.Jedis 集成 Redis 服务

pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.9.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>cn.zwqh</groupId>
	<artifactId>spring-boot-redis</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-boot-redis</name>
	<description>spring-boot-redis</description>
<span class="hljs-tag">&lt;<span class="hljs-name">properties</span>&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">java.version</span>&gt;</span>1.8<span class="hljs-tag">&lt;/<span class="hljs-name">java.version</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">properties</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">dependencies</span>&gt;</span>

	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-web<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>

	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-test<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">scope</span>&gt;</span>test<span class="hljs-tag">&lt;/<span class="hljs-name">scope</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>

	<span class="hljs-comment">&lt;!-- Redis --&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-data-redis<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">exclusions</span>&gt;</span>
			<span class="hljs-comment">&lt;!-- 排除lettuce包 --&gt;</span>
			<span class="hljs-tag">&lt;<span class="hljs-name">exclusion</span>&gt;</span>
				<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>io.lettuce<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
				<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>lettuce-core<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
			<span class="hljs-tag">&lt;/<span class="hljs-name">exclusion</span>&gt;</span>
		<span class="hljs-tag">&lt;/<span class="hljs-name">exclusions</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
	<span class="hljs-comment">&lt;!-- 添加jedis客户端 --&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>redis.clients<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>jedis<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>

<span class="hljs-tag">&lt;/<span class="hljs-name">dependencies</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">build</span>&gt;</span>
	<span class="hljs-tag">&lt;<span class="hljs-name">plugins</span>&gt;</span>
		<span class="hljs-tag">&lt;<span class="hljs-name">plugin</span>&gt;</span>
			<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
			<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
		<span class="hljs-tag">&lt;/<span class="hljs-name">plugin</span>&gt;</span>
	<span class="hljs-tag">&lt;/<span class="hljs-name">plugins</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">build</span>&gt;</span>

</project>

application.properties 配置文件

################ Redis 基础配置 ##############
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=zwqh
# 链接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
################ Redis 线程池设置 ##############
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.jedis.pool.min-idle=0

JedisRedisConfig

@Configuration
public class JedisRedisConfig {
<span class="hljs-meta">@Value("${spring.redis.database}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> database;
<span class="hljs-meta">@Value("${spring.redis.host}")</span>
<span class="hljs-keyword">private</span> String host;
<span class="hljs-meta">@Value("${spring.redis.port}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> port;
<span class="hljs-meta">@Value("${spring.redis.password}")</span>
<span class="hljs-keyword">private</span> String password;
<span class="hljs-meta">@Value("${spring.redis.timeout}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> timeout;
<span class="hljs-meta">@Value("${spring.redis.jedis.pool.max-active}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> maxActive;
<span class="hljs-meta">@Value("${spring.redis.jedis.pool.max-wait}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">long</span> maxWaitMillis;
<span class="hljs-meta">@Value("${spring.redis.jedis.pool.max-idle}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> maxIdle;
<span class="hljs-meta">@Value("${spring.redis.jedis.pool.min-idle}")</span>
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> minIdle;

<span class="hljs-comment">/**
 * 连接池配置信息
 */</span>

<span class="hljs-meta">@Bean</span>
<span class="hljs-keyword">public</span> JedisPoolConfig <span class="hljs-title function_">jedisPoolConfig</span><span class="hljs-params">()</span> {
	<span class="hljs-type">JedisPoolConfig</span> <span class="hljs-variable">jedisPoolConfig</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JedisPoolConfig</span>();
	<span class="hljs-comment">// 最大连接数</span>
	jedisPoolConfig.setMaxTotal(maxActive);
	<span class="hljs-comment">// 当池内没有可用连接时,最大等待时间</span>
	jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
	<span class="hljs-comment">// 最大空闲连接数</span>
	jedisPoolConfig.setMinIdle(maxIdle);
	<span class="hljs-comment">// 最小空闲连接数</span>
	jedisPoolConfig.setMinIdle(minIdle);
	<span class="hljs-comment">// 其他属性可以自行添加</span>
	<span class="hljs-keyword">return</span> jedisPoolConfig;
}

<span class="hljs-comment">/**
 * Jedis 连接
 * 
 * <span class="hljs-doctag">@param</span> jedisPoolConfig
 * <span class="hljs-doctag">@return</span>
 */</span>
<span class="hljs-meta">@Bean</span>
<span class="hljs-keyword">public</span> JedisConnectionFactory <span class="hljs-title function_">jedisConnectionFactory</span><span class="hljs-params">(JedisPoolConfig jedisPoolConfig)</span> {
	<span class="hljs-type">JedisClientConfiguration</span> <span class="hljs-variable">jedisClientConfiguration</span> <span class="hljs-operator">=</span> JedisClientConfiguration.builder().usePooling()
			.poolConfig(jedisPoolConfig).and().readTimeout(Duration.ofMillis(timeout)).build();
	<span class="hljs-type">RedisStandaloneConfiguration</span> <span class="hljs-variable">redisStandaloneConfiguration</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">RedisStandaloneConfiguration</span>();
	redisStandaloneConfiguration.setHostName(host);
	redisStandaloneConfiguration.setPort(port);
	redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
	<span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JedisConnectionFactory</span>(redisStandaloneConfiguration, jedisClientConfiguration);
}

<span class="hljs-comment">/**
 * 缓存管理器
 * 
 * <span class="hljs-doctag">@param</span> connectionFactory
 * <span class="hljs-doctag">@return</span>
 */</span>
<span class="hljs-meta">@Bean</span>
<span class="hljs-keyword">public</span> RedisCacheManager <span class="hljs-title function_">cacheManager</span><span class="hljs-params">(RedisConnectionFactory connectionFactory)</span> {
	<span class="hljs-keyword">return</span> RedisCacheManager.create(connectionFactory);
}

<span class="hljs-meta">@Bean</span>
<span class="hljs-keyword">public</span> RedisTemplate&lt;String, Serializable&gt; <span class="hljs-title function_">redisTemplate</span><span class="hljs-params">(JedisConnectionFactory connectionFactory)</span> {
	RedisTemplate&lt;String, Serializable&gt; redisTemplate = <span class="hljs-keyword">new</span> <span class="hljs-title class_">RedisTemplate</span>&lt;&gt;();
	redisTemplate.setKeySerializer(<span class="hljs-keyword">new</span> <span class="hljs-title class_">StringRedisSerializer</span>());
	redisTemplate.setValueSerializer(<span class="hljs-keyword">new</span> <span class="hljs-title class_">GenericJackson2JsonRedisSerializer</span>());
	redisTemplate.setConnectionFactory(jedisConnectionFactory(jedisPoolConfig()));
	<span class="hljs-keyword">return</span> redisTemplate;
}

}

单元测试同上

出现预期结果。

总结

上面介绍了 Spring Boot 2.X 如何通过 Lettuce 和 Jedis 来集成 Redis 服务,按项目需求,我们也可以自定义操作类来实现数据操作。

示例代码

github

码云

非特殊说明,本文版权归 朝雾轻寒 所有,转载请注明出处.

原文标题:Spring Boot 2.X(六):Spring Boot 集成 Redis

原文地址: https://www.zwqh.top/article/info/11

如果文章对您有帮助,请扫码关注下我的公众号,文章持续更新中...