Spring boot
在2.x以后系统的redis
切换成了Lettuce
实现. 为了契合Spring boot
自动装配的思想和优势,尽可能在使用的时候使用系统已经提供的,在不知足的状况下再本身自定义相关的bean
对象.html
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。相比Memcached它支持存储的类型相对更多(字符、哈希、集合、有序集合、列表、GEO),同时Redis是线程安全的。2010年3月15日起,Redis的开发工做由VMware主持,2013年5月开始,Redis的开发由Pivotal赞助。java
Lettuce 和 Jedis 的都是链接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用链接池,为每一个Jedis实例增长物理链接。Lettuce基于Netty的链接实例(StatefulRedisConnection),能够在多个线程间并发访问,且线程安全,知足多线程环境下的并发访问,同时它是可伸缩的设计,一个链接实例不够的状况也能够按需增长链接实例。web
在pom.xml
添加spring-boot-starter-data-redis
的依赖, 在Spring boot 2.x
的版本以后默认底层提供的实现是使用Lettuce
, 而不是jedis
. 可是两种方式都提供的默认的实现
,你们能够根据本身的项目选择适合本身的版本redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
复制代码
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
复制代码
在application.yaml
中添加以下内容, 对应的源代码能够在这里查看org.springframework.boot.autoconfigure.data.redis.RedisProperties
spring
spring:
redis:
host: 192.168.123.225
database: 0
port: 6379
password:
# 保留一个
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 1
jedis:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 1
复制代码
在前面我曾经说过,尽可能使用Spring
已经提供好的bean
, 具体位置 org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
这时候发现Spring
已经帮咱们会自动注入redisTemplate
StringRedisTemplate
RedisConnectionFactory
, 这时候默认的通常不知足咱们的需求,这时候只须要在定义一个RedisTemplate
便可, 而不须要全部的对象都本身从新自定义, Lettuce
和 Jedis
是本身各自的实现,只须要添加或排除具体的java类便可切换为各自不一样的 RedisConnectionFactory
sql
@Configuration
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
复制代码
局部代码块数据库
@Configuration
@ConditionalOnClass({GenericObjectPool.class, JedisConnection.class, Jedis.class})
class JedisConnectionConfiguration extends RedisConnectionConfiguration {
...
@Configuration
@ConditionalOnClass({RedisClient.class})
class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
private final RedisProperties properties;
...
复制代码
测试代码直接看这里就能够了一块儿来学SpringBoot | 第九篇:整合Lettuce Redisapache