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