Spring Boot整合Redis我們需要添加依靠的jar包,spring-boot-starter-data-redis中包含spring和redis相關的jar包,jedis作為redis的客戶端也需要添加到工程中,Spring Boot的版本信息在父pom中已指心猿意馬,子模塊中的spring相關的jar包無需別的指心猿意馬。
org.springframework.boot
spring-boot-starter-data-redis
redis.clients
jedis
3.0.0-m1
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 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 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中的數據。
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!