在SpringBoot中操作Redis資料庫,有兩種方式,分别是RedisTemplate和StringRedisTemplate.
RedisTemplate是基于對象的操作,在Redis中是存儲的對象的序列化表示。
StringRedisTemplate是基于字元串的操作,在Redis中是存儲的字元串表示。
在SpringBoot中操作Redis的步驟如下。
配置Redis Maven坐标
首先要在pom.xml中引入Redis依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置Redis連接配接資訊
在application.properties中配置Redis的連接配接資訊。
如果沒有設定密碼username和password不用配置。
如果是本機的預設端口,這四項配置都不需要配置,SpirngBoot會自動使用預設配置。
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.username=user
spring.redis.password=pass
使用RedisTemplate
我們通過測試類進行測試。
通過@Autowired注解自動注入RedisTemplate對象。
@Autowired
private RedisTemplate redisTemplate;
RedisTemplate提供了多組方法用于操作Redis中不同的資料結構,這些方法以opsFor為字首。
我用最基本的鍵值對的資料結構進行測試。
通過redisTemplate.opsForValue()擷取ValueOperations對象,使用該對象的set方式在Redis中存儲鍵值對,使用get方法基于鍵值擷取value值。
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("test",123);
System.out.println(valueOperations.get("test"));;
執行測試用例,成功讀取在Redis中存儲的值。
這時在redis-cli用戶端中執行指令:keys *,檢視Redis中已存儲的鍵。
能看到剛才通過測試類存儲的鍵是:\xac\xed\x00\x05t\x00\x04test
這是因為RedisTemplate是基于對象存儲的,存儲的是對象的序列化值。
這顯然不是我們想要的,這就要使用StringReidsTemplate進行資料的存取。
使用StringReidsTemplate
使用@Autowired注解自動注入StringRedisTemplate對象。
@Autowired
private StringRedisTemplate stringRedisTemplate;
操作方法與ReidsTemplate類似,差別是是要在ValueOperations<String, String>類上加上泛型。
ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();
stringStringValueOperations.set("test","123");
System.out.println(stringStringValueOperations.get("test"));;
執行測試類,正确取到在Redis中存儲的值。
這時在redis-cli用戶端中執行指令:keys *,檢視Redis中已存儲的鍵。
能看到剛存儲的鍵是:test
這才是我們期望的結果。
在實際使用中StringRedisTemplate更常用。
完整測試代碼
@SpringBootTest
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void testRedisTemplate(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("test",123);
System.out.println(valueOperations.get("test"));;
}
@Test
void testStringRedisTemplate(){
ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();
stringStringValueOperations.set("test","123");
System.out.println(stringStringValueOperations.get("test"));;
}
}