文章使用版本為 Spring Boot 2.1.x
前言
Redis 是一個(gè)高性能的key-value數(shù)據(jù)庫侮叮,與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
- Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
- Redis不僅僅支持簡單的key-value類型的數(shù)據(jù)叫惊,同時(shí)還提供list招刹,set,zset笋婿,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
- Redis支持?jǐn)?shù)據(jù)的備份顿颅,即master-slave模式的數(shù)據(jù)備份缸濒。
相信大家平時(shí)工作中也會(huì)用到Redis,那么怎么在Spring Boot中使用呢粱腻?
配置Redis
在Spring Boot中使用Redis非常簡單庇配,只需要在application.yml
中配置Redis數(shù)據(jù)庫的地址就可以了。
spring:
redis:
host: localhost
port: 6379
password:
database: 0
其實(shí)看RedisProperties
源碼你就可以知道绍些,其實(shí)只要我們通過maven引入spring-boot-starter-data-redis
捞慌,Spring Boot就會(huì)默認(rèn)連接上述配置的Redis,如果連不上就會(huì)報(bào)錯(cuò)柬批。
通過看RedisAutoConfiguration
的源碼我們可以看到卿闹,Spring Boot自動(dòng)幫我們配置了2個(gè)Bean揭糕,RedisTemplate<Object, Object>
、StringRedisTemplate
锻霎。
@Configuration
protected static class RedisConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
測(cè)試
package org.schhx.springbootlearn.dao;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.schhx.springbootlearn.module.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTemplateTest {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
RedisTemplate redisTemplate;
@Test
public void save() throws Exception {
String key = UUID.randomUUID().toString();
String value = UUID.randomUUID().toString();
stringRedisTemplate.opsForValue().set(key, value);
stringRedisTemplate.expire(key, 5, TimeUnit.SECONDS);
Assert.assertEquals(value, stringRedisTemplate.opsForValue().get(key));
Thread.sleep(5000);
Assert.assertEquals(null, stringRedisTemplate.opsForValue().get(key));
}
@Test
public void saveObject() throws Exception {
String key = UUID.randomUUID().toString();
User user = new User().setName("張三").setAge(20);
redisTemplate.opsForValue().set(key, user);
redisTemplate.expire(key, 5, TimeUnit.SECONDS);
Assert.assertEquals(user, redisTemplate.opsForValue().get(key));
Thread.sleep(5000);
Assert.assertEquals(null, redisTemplate.opsForValue().get(key));
}
}
后記
大家有沒有發(fā)現(xiàn)整個(gè)過程非常簡單著角,只要兩步就可以了
- 通過maven引入
spring-boot-starter-data-redis
- 在application中配置Redis地址
然后我們就可以愉快的使用redisTemplate了,當(dāng)然你也可以在redisTemplate的基礎(chǔ)上進(jìn)一步封裝旋恼。