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

SpringBoot中如何操作Redis

PHPz
發布: 2023-05-26 12:25:14
轉載
1796 人瀏覽過

方案一: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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板