首頁  >  文章  >  資料庫  >  SpringBoot中如何操作Redis

SpringBoot中如何操作Redis

PHPz
PHPz轉載
2023-05-26 12:25:141737瀏覽

方案一:Spring Data Redis創建工程

創建工程,引入Redis 依賴:

SpringBoot中如何操作Redis

創建成功後,還需要手動引入commos-pool2 的依賴,因此最終完整的pom.xml 依賴如下:

<dependencies>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-data-redis</artifactid>
 </dependency>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
 </dependency>
</dependencies>
<dependency>
 <groupid>org.apache.commons</groupid>
 <artifactid>commons-pool2</artifactid>
</dependency>

這裡主要是引入了Spring Data Redis 連接池。

設定Redis 訊息

接下來設定Redis 的訊息,訊息包含兩方面,一方面是Redis 的基本訊息,另一方面則是連結池訊息:

spring.redis.database=0
spring.redis.password=123
spring.redis.port=6379
spring.redis.host=192.168.66.128
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms

自動配置

當開發者在專案中引入了Spring Data Redis ,並且配置了Redis 的基本信息,此時,自動化配置就會生效。

我們從Spring Boot 中Redis 的自動化設定類別中就可以看出端倪:

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
  @Bean
  @ConditionalOnMissingBean(name = "redisTemplate")
  public RedisTemplate<object> redisTemplate(
      RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    RedisTemplate<object> template = new RedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
  }
  @Bean
  @ConditionalOnMissingBean
  public StringRedisTemplate stringRedisTemplate(
      RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    StringRedisTemplate template = new StringRedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
  }
}</object></object>

這個自動化設定類別很好理解:

  1. 首先標記這個是一個配置類,同時該配置在RedisOperations 存在的情況下才會生效(即專案中引入了Spring Data Redis)

  2. 然後導入在application.properties 中配置的屬性

  3. 然後再導入連接池資訊(如果存在的話)

  4. 最後,提供了兩個Bean ,RedisTemplate 和StringRedisTemplate ,其中StringRedisTemplate 是RedisTemplate 的子類,兩個的方法基本上一致,不同之處主要體現在操作的資料類型不同,RedisTemplate 中的兩個泛型都是Object ,意味者儲存的key 和value 都可以是一個對象,而StringRedisTemplate 的兩個泛型都是String ,意義者StringRedisTemplate 的key 和value 都只能是字串。只有在開發者沒有提供相關的 Bean 時,這兩個配置才會生效。如果有提供相關的 Bean,則不會生效。

使用

接下來,可以直接在Service 中註入StringRedisTemplate 或RedisTemplate 來使用:

@Service
public class HelloService {
 @Autowired
 RedisTemplate redisTemplate;
 public void hello() {
  ValueOperations ops = redisTemplate.opsForValue();
  ops.set("k1", "v1");
  Object k1 = ops.get("k1");
  System.out.println(k1);
 }
}

Redis 中的資料操作,大體上來說,可以分為兩種:

  1. 針對key 的操作,相關的方法就在RedisTemplate 中

  2. 針對具體資料類型的操作,相關的方法需要先取得對應的資料類型,取得對應資料類型的操作方法是opsForXXX

呼叫就可以將資料儲存到Redis 中去了,如下:

SpringBoot中如何操作Redis

k1 前面的字元是由於使用了RedisTemplate 導致的,RedisTemplate 對key 進行序列化之後的結果。

RedisTemplate 中,key 預設的序列化方案是 JdkSerializationRedisSerializer 。

而在 StringRedisTemplate 中,key 預設的序列化方案是 StringRedisSerializer ,因此,如果使用 StringRedisTemplate ,預設 key 前面不會有前綴。

不過開發者也可以自行修改RedisTemplate 中的序列化方案,如下:

@Service
public class HelloService {
 @Autowired
 RedisTemplate redisTemplate;
 public void hello() {
  redisTemplate.setKeySerializer(new StringRedisSerializer());
  ValueOperations ops = redisTemplate.opsForValue();
  ops.set("k1", "v1");
  Object k1 = ops.get("k1");
  System.out.println(k1);
 }
}

當然也可以直接使用StringRedisTemplate:

@Service
public class HelloService {
 @Autowired
 StringRedisTemplate stringRedisTemplate;
 public void hello2() {
  ValueOperations ops = stringRedisTemplate.opsForValue();
  ops.set("k2", "v2");
  Object k1 = ops.get("k2");
  System.out.println(k1);
 }
}

另外需要注意,Spring Boot 的自動化配置,只能配置單機的Redis ,如果是Redis 集群,則所有的東西都需要自己手動配置,關於如何操作Redis 集群,松哥以後再來和大家分享。

方案二:Spring Cache

透過Spring Cache 的形式來操作Redis,Spring Cache 統一了緩存江湖的門面,這種方案,松哥之前有過一篇專門的文章介紹,小夥伴可以移步這裡:Spring Boot中,Redis快取還能這麼用! 。

方案三:回歸原始時代

第三種方案,就是直接使用Jedis 或其他的客戶端工具來操作Redis ,這種方案在Spring Boot 中也是支援的,雖然操作麻煩,但是支援

以上是SpringBoot中如何操作Redis的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除