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中的數據。
-
面向對象與面向過程的區別
面向對象和麪向過程都是解決問題的邏輯方法,分析一個問題既可以用面向對象的方法來思考,也可以用面向過程的方法來解決。但是兩者還是有一定的區別的,下面一起來看看這些區別主要體現在什麼地方吧。操作方法(01)面向過程是分析問題並解決問題所需要的步驟,強調是解決...
-
PS教程:簡單快速的通道摳圖
操作方法(01)開啟PS後,開啟一張需要處理的圖片,點擊通道,選擇綠色(那個色差大選哪個),此次演示選擇一個難度稍大的圖片處理,因爲頭紗是透明的,背後的背景和顏色還得去掉。(02)點擊鼠標右鍵,選擇複製。(03)按Ctrl+L,將色階裏面的箭頭向中間拉,然後點擊確定。(04)點擊套索工具,選中人...
-
怎樣註銷支付寶帳戶
支付寶(中國)網絡技術有限公司是國內領先的第三方支付平臺,致力於提供“簡單、安全、快速”的支付解決方案。支付寶公司從2004年建立開始,始終以“信任”作爲產品和服務的核心。旗下有“支付寶”與“支付寶錢包”兩個獨立品牌。自2014年第二季度開始成爲當前全球最...
-
如何安裝淘寶數字證書
在使用支付寶或者淘寶的時候如果在電腦上未安裝數字證書,對個人的財產保護就不是很安全,那麼如何安裝淘寶數字證書呢?操作方法(01)在網頁上搜尋支付寶,點擊進入。(02)登陸後點擊上方“安全中心”。(03)數字證書沒有使用,點擊“申請”。(04)點擊“申請數字證書”。(05)填寫資訊...
相關文章
- missing operating system是怎麼回事?
- 開機提示bootmgr is compressed無法啓動的方法
- JedisConnectionFactory如何獲取Redis
- 開機出現bootmgr is missing
- LOL加載介面時閃退whoops,something.broke
- 如何在Windows中安裝VMware Workstation Pro 12
- 關於BOOTMGR is missing錯誤提示解決方法。
- 電腦提示operating system not found怎麼辦
- SpringBoot整合SpringSeesion實現Redis快取
- 當電腦出現missing operating system的解決辦法