Spring Boot如何整合Redis
Spring Boot是目前非常流行的Java Web開發框架,Redis是非關係型資料庫的一種,以鍵值對的形式儲存。Spring對Redis的支援是通過Spring Data Redis來實現的,給我們提供了RedisTemplate和StringRedisTemplate兩種模板來操作資料。Spring Boot框架也提供了對Redis的支援,下面我們來講一下Spring Boot框架整合Redis的步驟。
工具/材料
IntelliJ IDEA
操作方法
Spring Boot整合Redis我們需要新增依賴的jar包,spring-boot-starter-data-redis中包含spring和redis相關的jar包,jedis作為redis的客戶端也需要新增到工程中,Spring Boot的版本資訊在父pom中已指定,子模組中的spring相關的jar包無需另外指定。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.0-m1</version>
</dependency>
Spring Boot會根據application.properties中的配置對Redis的屬性進行自動配置,並注入到RedisProperties類中。在application.properties配置檔案中這些屬性都是以spring.redis為字首的,值得注意的是在Spring Boot 1.5.x版本中預設的Redis客戶端是jedis,因此在配置檔案中無需指定,如下圖所示。
Spring Boot 1.5.x版本的整合配置網上可以搜尋大量的文章,然而Spring Boot 2.x版本的整合資料卻非常少,甚至提供的配置不能正常使用,因此本文主要講解Spring Boot 2.x整合Redis以及Redis的使用情況。spring-boot 2.x版本有jedis和lettuce兩種客戶端,因此我們必須要去指定使用哪一種客戶端,兩個客戶端的配置如下圖所示,本文使用的是Jedis客戶端連線池,具體的配置如下。
# Redis資料庫索引(預設為0)
spring.redis.database=0
# Redis伺服器地址
spring.redis.host=127.0.0.1
# Redis伺服器連線埠
spring.redis.port=6379
# Redis伺服器連線密碼(預設為空)
spring.redis.password=xylx1.t!@#
# 配置jedis連線池
# 連線池最大連線數(使用負值表示沒有限制)
spring.redis.jedis.pool.max-active=8
# 連線池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.jedis.pool.max-wait=-1ms
# 連線池中的最大空閒連線
spring.redis.jedis.pool.max-idle=8
# 連線池中的最小空閒連線
spring.redis.jedis.pool.min-idle=0
# 連線超時時間(毫秒)
spring.redis.timeout=5000ms
由配置我們可以看到spring-boot 2.x版本時間設定需要加單位ms,因為引數的型別為Duration。另外spring.redis.timeout儘量不要配置0,否則可能會出現io.lettuce.core.RedisCommandTimeoutException: Command timed out超時錯誤。
配置檔案編輯完成後,我們開始編寫程式碼實現Redis資料的儲存和讀取。我們建立一個RedisUtil工具類,該類使用@Component註解表示交由Spring管理,StringRedisTemplate是Spring提供的,可以使用@Autowired註解直接注入,接下來便可以書寫存和取的程式碼了。
@Component
public class RedisUtil {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 存字串
* @param key 快取鍵
* @param value 快取值
* @param expireTime 過期時間(s)
*/
public void setString(String key, String value, int expireTime){
ValueOperations<String, String> ops = redisTemplate.opsForValue();
if (expireTime != 0) {
ops.set(key, value, expireTime, TimeUnit.SECONDS);
} else {
ops.set(key,value);
}
}
/**
* 取字串
* @param key 快取鍵
* @return 快取值
*/
public String getString(String key){
ValueOperations<String, String> ops = this.redisTemplate.opsForValue();
return ops.get(key);
}
接下來我們編寫Controller層程式碼去呼叫RedisUtil工具類,實現資料的儲存和讀取,程式碼比較簡單可以參考下圖。若想驗證Redis是否可用,還需要編寫啟動類,如下圖所示。
由上圖可看到我們編寫了一個post請求用於儲存字串,get請求用於取出字串。啟動類通過main方法啟動應用,接下來我們使用postman去模擬瀏覽器呼叫post和get請求,由下圖可以看到Redis儲存的資料成功被取出。
接下來我們介紹Jedis,這是一個封裝了Redis的客戶端,在Spring Boot整合Redis的基礎上,可以提供更簡單的API操作。因此我們需要配置JedisPool的Bean,程式碼如下,其中@Configuration註解表明這是一個配置類,我們在該類中注入RedisProperties,並且使用@Bean註解指定JedisPool。
@Configuration
public class RedisConfiguration {
@Autowired
private RedisProperties properties;
@Bean
public JedisPool getJedisPool(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(properties.getJedis().getPool().getMaxIdle());
config.setMaxTotal(properties.getJedis().getPool().getMaxActive());
config.setMaxWaitMillis(properties.getJedis().getPool().getMaxWait().toMillis());
JedisPool pool = new JedisPool(config,properties.getHost(),
properties.getPort(),100,
properties.getPassword(), properties.getDatabase());
return pool;
}
}
接下來我們編輯JedisUtil工具類,通過SpringBoot容器的@Component註解來自動建立,並且注入JedisPool,使用jedisPool.getResource()方法來獲取Jedis,並最終實現操作redis資料庫,其程式碼如下。
@Component
public class JedisUtil {
@Autowired
JedisPool jedisPool;
//獲取key的value值
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String str = "";
try {
str = jedis.get(key);
} finally {
try {
jedis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return str;
}
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String str = "";
try {
str = jedis.set(key, value);
} finally {
try {
jedis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return str;
}
}
JedisUtil工具類編寫完成後,我們修改之前的RedisController,並注入JedisUtil,程式碼如下圖所示。然後再用postman分別呼叫post和get介面,我們可以看到成功取到了新的key的value值。
特別提示
在Spring Boot整合Redis前本機需安裝Redis,另外可以使用RedisDesktopManager這個Redis這個桌面管理工具檢視Redis中的資料。
-
頭像製作之萌萌噠小豬頭
可愛的萌萌噠小豬頭是很多人都喜歡的,很多的女生都喜歡它,今天小編就為大家帶來:頭像製作之萌萌噠小豬頭。工具/材料ai軟體電腦操作方法01首先的話,我們開啟我們的電腦,接著開啟我們ai軟體,接著新建一個名字為“小豬頭”的ai檔案,如下圖所示。02接著我們第一步:選擇鋼...
-
耳機不響了怎麼辦?
操作方法(01)鼓膜如果出現故障,通常有四種情況:振膜塌陷、振膜開裂與進鐵粉。這四種情況往往會造成耳機有破音、雜音和低音丟失。如果出現上述四種問題,可以按以下方法修復。一、振膜塌陷的修復如果出現振膜塌陷的情況,可用鑷子夾住一樣帶黏性的物質,例如雙面膠,...
-
怎麼用支付寶購買彩票
怎麼使用支付寶購買彩票,讓小編教給你最新的購買指南。操作方法(01)國家全面禁止網路售彩,所以相關的支付寶購彩指南經驗全部取消。(02)但是支付寶可以轉賬,可以與彩票代售點老闆互加好友,通過轉賬的方式由老闆代購。(03)支付寶還可以當面付,在彩票代售點與老闆通過支付寶...
-
支付寶芝麻信用,什麼是芝麻信用,芝麻信用分
芝麻信用分是使用者授權後根據多方面多維度的資訊,通過人工智慧、雲端計算等客觀的呈現個人信用的綜合評分。芝麻積分是什麼?(01)芝麻信用積分通過個人的一些維度,計算出的綜合評分,用於預測個人在信用行為中的違約率如何檢視自己的信用積分?(01)開啟支付寶,點開芝麻信用介面...
相關文章
- JedisConnectionFactory如何獲取Redis
- SpringBoot整合SpringSeesion實現Redis快取
- 開機提示bootmgr is compressed無法啟動的方法
- 當電腦出現missing operating system的解決辦法
- 如何在Windows中安裝VMware Workstation Pro 12
- missing operating system是怎麼回事?
- 關於BOOTMGR is missing錯誤提示解決方法。
- 開機出現bootmgr is missing
- 電腦提示operating system not found怎麼辦
- LOL載入介面時閃退whoops,something.broke