天天看點

SpringBoot中操作Redis的兩種方式(RedisTemplate和String...)

作者:長頸鹿睡覺

在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為字首。

SpringBoot中操作Redis的兩種方式(RedisTemplate和String...)

我用最基本的鍵值對的資料結構進行測試。

通過redisTemplate.opsForValue()擷取ValueOperations對象,使用該對象的set方式在Redis中存儲鍵值對,使用get方法基于鍵值擷取value值。

ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("test",123);
System.out.println(valueOperations.get("test"));;           

執行測試用例,成功讀取在Redis中存儲的值。

SpringBoot中操作Redis的兩種方式(RedisTemplate和String...)

這時在redis-cli用戶端中執行指令:keys *,檢視Redis中已存儲的鍵。

能看到剛才通過測試類存儲的鍵是:\xac\xed\x00\x05t\x00\x04test

這是因為RedisTemplate是基于對象存儲的,存儲的是對象的序列化值。

這顯然不是我們想要的,這就要使用StringReidsTemplate進行資料的存取。

SpringBoot中操作Redis的兩種方式(RedisTemplate和String...)

使用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中存儲的值。

SpringBoot中操作Redis的兩種方式(RedisTemplate和String...)

這時在redis-cli用戶端中執行指令:keys *,檢視Redis中已存儲的鍵。

能看到剛存儲的鍵是:test

這才是我們期望的結果。

在實際使用中StringRedisTemplate更常用。

SpringBoot中操作Redis的兩種方式(RedisTemplate和String...)

完整測試代碼

@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"));;
    }
}
           

繼續閱讀