SpringBoot 2 快速集成 Jedis客戶端(自動配置版)

1.前言

通過該篇博客,你將瞭解到如何快速通過 SpringBoot 自動配置方式集成 Redis java客戶端 Jedis,並通過 Jedis 進行簡單操作。

2.簡單介紹 redis

redis 官方介紹如下:

Redis is an open source (BSD licensed), in-memory data structure
store, used as a database, cache and message broker. It supports data
structures such as strings, hashes, lists, sets, sorted sets with
range queries, bitmaps, hyperloglogs, geospatial indexes with radius
queries and streams. Redis has built-in replication, Lua scripting,
LRU eviction, transactions and different levels of on-disk
persistence, and provides high availability via Redis Sentinel and
automatic partitioning with Redis Cluster

Redis是一個開放源代碼(BSD許可)內存中的數據結構存儲,用作數據庫、緩存和消息代理。它支持字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、帶範圍查詢的排序集合(sortedsets )、位圖(bitmaps)、超日誌(hyperloglogs)、帶半徑查詢和流的地理空間索引等數據結構。Redis具有內置複製、lua腳本、transactions 、事務和不同級別的磁盤持久性,並通過Redis Sentinel和Redis羣集的自動分區提供高可用性

3.自動配置方式集成Jedis客戶端

在操作前首先應該在本地或者遠程的機器上安裝 redis 服務,可以參考 Windows 安裝 Redis 教程
其他可以百度或者期待我後續的博客教程。

通過引入 spring-boot-starter-data-redis 我們就可以使用 RedisTemplate 對象來進行對 Redis 的各種操作, RedisTemplate 是在 LettuceJedis 的之上進行封裝 ,默認情況是使用 Lettuce

但是我們今天要介紹的是通過 SpringBoot 自動配置 的功能來使用 Jedis 客戶端連接 Redis。

3.1引入Jedis依賴

首先引入 Jedis 的依賴代碼如下:

		<dependency>
		    <groupId>redis.clients</groupId>
		    <artifactId>jedis</artifactId>
		</dependency>

因爲 SpringBoot spring-boot-starter-data-redis 集成了 Jedis 所以我們直接引入jedis 依賴 無需在關係jedis的版本號了。

3.2 定義 Jedis 相關配置的 Properties 類

通過 JedisProperties 配置信息類來 設置連接 reids服務相關配置。例如 註解ip ,服務端口 具體各種配置請參看下面代碼的屬性註釋。

關於配置信息類註解的介紹:

@Component: 聲明該註解的類是 Spring的 Bean
@ConfigurationProperties: 通過@ConfigurationProperties 註解 prefix參數定義在 application.properties 中的配置的前綴 。 SpringBoot 通過該註解可以完成將application.properties 中配置的信息注入到JedisProperties 中。

例如 在application.properties 中配置 如下信息:

spring.jedis.host=127.0.0.1
spring.jedis.port=6380

SpringBoot 會幫我們將 application.properties 中的host 和port 配置的值注入到 JedisProperties 中的 host 和 port 成員屬性中。

具體代碼如下:

@Component
@ConfigurationProperties(prefix="spring.jedis")
public class JedisProperties {

	/**Redis服務器主機ip*/
	private String host = "localhost";
	/**Redis服務器登錄密碼*/
	private String password;
	/**Redis服務器端口*/
	private int port = 6379;
	/**連接超時時間*/
	private int timeout = 2000;
	/**連接池配置*/
	private Pool pool = new Pool();
	//...省略 get and set 方法
}
public class Pool {
	/**最大連接數, 默認8個*/
    private int maxTotal = 8;
    /**最大空閒連接數, 默認8個*/
    private int maxIdle = 8;
    /**最小空閒連接數, 默認0*/
    private int minIdle = 0;
    private long maxWaitMillis;
	//...省略 get and set 方法    
	}

redis 配置說明

如果你啓動的是本地 redis服務 那麼你根本不需要進行任何配置就可以操作 redis了。

如果你的redis在安裝在遠程的服務器中。那麼你需要進行如下配置:

# 必選配置
spring.jedis.host= Redis服務器主機ip
spring.jedis.port=Redis服務器端口
# 如果你redis服務配置了密碼這個就必須要進行配置。
spring.jedis.password=Redis服務器登錄密碼
# 非必選配置
spring.jedis.timeout=連接超時時間
spring.jedis.pool.max-total=最大連接數, 默認8個
spring.jedis.pool.max-idle=最大空閒連接數, 默認8個
spring.jedis.pool.min-idle=最小空閒連接數, 默認0
spring.jedis.pool.max-wait-millis=獲取連接時的最大等待毫秒數

3.3 定義 Jedis客戶端自動配置類

自動配置是SpringBoot 的核心功能之一,在SpringBoot 實戰一書中是這麼介紹的:針對很多Spring 應用程序常見的應用功能,SpringBoot 能自動提供相關配置。它就像是一個樣板配置。並且SprignBoot 自動配置非常靈活,我們也可以通過覆蓋自動配置來完成自定義的配置。

關於自動配置中註解介紹:

@Configuration + @Bean: javaConfig 操作組合 和在xml中配置Bean是一個效果。

@ConditionalOnClass: 該註解的參數對應的類必須存在,否則不解析該註解修飾的配置類

@EnableConfigurationProperties: 會將會JedisProperties作爲一個Bean引入JedisAutoConfiguration 中

@ConditionalOnMissingBean: 該註解表示,如果存在它修飾的類的Bean,則不需要再創建這個 Bean;可以給該註解傳入參數例如@ConditionOnMissingBean(name = “example”),這個表示如果name爲“example”的bean存在,這該註解修飾的代碼塊不執行。

介紹完註解作用下面基本就是 配置JedisPoolConfig 然後生成 JedisPool 對象。具體請參考下面的代碼:

@Configuration
@ConditionalOnClass(JedisPool.class)
@EnableConfigurationProperties(JedisProperties.class)
public class JedisAutoConfiguration {
	private JedisProperties jedisProperties;
	
	public JedisAutoConfiguration(JedisProperties jedisProperties) {
		this.jedisProperties = jedisProperties;
	}
	
	@Bean
	@ConditionalOnMissingBean(JedisPool.class)
	public JedisPool jedisPool() {
		
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxIdle(jedisProperties.getPool().getMaxIdle());
		poolConfig.setMaxTotal(jedisProperties.getPool().getMaxTotal());
		poolConfig.setMaxWaitMillis(jedisProperties.getPool().getMaxWaitMillis() * 1000);
		
		JedisPool jedisPool = new JedisPool(poolConfig, jedisProperties.getHost(), jedisProperties.getPort(),
				jedisProperties.getTimeout()*1000, jedisProperties.getPassword(), 0);
		return jedisPool;
	}
}

4.測試

功能開發完畢就要對開發的功能進行測試了,
SpringBoot的測試 需要在測試類上引入 @RunWith() 和 @SpringBootTest 註解。
通過 @Autowired 將JedisPool 注入到測試類中
然後通過JedisPool 獲取 Jedis對象 就可以操作 redis了。

測試具體代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class JedisTest {
	
	@Autowired
	private JedisPool jedisPool;
	@Test
	public void set() {
		Jedis jedis = jedisPool.getResource();
		jedis.set("abc", "123");
	}
	
	@Test
	public void get() {
		Jedis jedis = jedisPool.getResource();
		String value = jedis.get("abc");
		System.out.println(value);
	}
}

SpringBoot2.0 快速集成 Jedis客戶端 連接 redis 服務 具體代碼請訪問我的 github 進行查看。

5.小結

自動配置集成 Jedis 需要我們進行如下操作:

  1. 引入 jedis 依賴
  2. 定義 Jedis 相關配置的 Properties 類
  3. 定義 Jedis 自動配置類

希望通過該博客讓你學會SpringBoot 的自動配置操作,實際開發中你可以使用這種方式來操作 Redis,但是更推薦使用 RedisTemplate 的方式。

6.代碼示例

具體代碼示例請查看 :
博客的讀者可以通過查看下面倉庫的中的模塊工程名: spring-boot-2.x-redis

Github:https://github.com/zhuoqianmingyue/springbootexamples/tree/master/spring-boot-2.x-redis

如果您對這些感興趣,歡迎 star、或轉發給予支持!轉發請標明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章