1. 程式人生 > >Spring Boot對Redis的支援

Spring Boot對Redis的支援

一 點睛

Redis是一個基於健值對的開源記憶體資料儲存,當然Redis也可以做資料快取。

二 Spring對Redis的支援

1 配置

Spring對Redis的支援是通過Spring Data Redis來實現的,Spring Data JPA為我們提供了連線相關的ConnectionFactory和資料操作相關的RedisTemplate。

根據Redis的不同的Java客戶端,Spring Data Redis提供瞭如下的ConnectionFactory:

  • JedisConnectionFactory:使用Jedis作為Redis客戶端。

  • JredisConnectionFactory:使用Jredis作為Redis客戶端。

  • LettuceConnectionFactory:使用Lettuce作為Redis客戶端。

  • SrpConnectionFactory:使用Spullara/redis-protocol作為Redis客戶端。

配置方式虛擬碼如下:

@Bean
public RedisConnectionFactory redisConnectionFactory(){
    return new JedisConnectionFactory();
}

RedisTemplate配置方式虛擬碼如下:

@Bean
public RedisTemplate<Object,Object> redisTemplate(){
    RedisTemplate<Object,Object> template=new RedisTemplate<Object,Object>();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

2 使用

Spring Data Redis為我們提供了RedisTemplate和StringRedisTemplate兩個模板來進行資料操作,其中,StringRedisTemplate只針對健值都是字元型的資料進行操作。

RedisTemplate和StringRedisTemplate提供的主要資料訪問方法如下:

  • opsForValue():操作只有簡單屬性的資料。
  • opsForList():操作含有list的資料。
  • opsForSet():操作含有set的資料。
  • opsForZSet():操作含有Zset(有序的set)的資料。
  • opsForHash():操作含有hash的資料。

3 定義Serializer

當我們的資料儲存到Redis的時候,我們的鍵(key)和值(value)都是通過Spring提供的Serializer序列化到資料庫的。

RedisTemplate預設使用的是JdkSerializationRedisSerializer。

StringRedisTemplate預設使用的是StringRedisSerializer。

Spring Data JPA為我們提供了下面的Serializer:

GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。

三 Spring Boot對Redis的支援

Spring Boot對Redis的支援,目錄如下:

檢視RedisAutoConfiguration原始碼,會發現它為我們預設配置了JedisConnectionFactory、RedisTemplate以及StringRedisTemplate,讓我們可以直接使用Redis作為資料儲存。

檢視RedisProperties原始碼,使用“sping.redis”為字首的屬性在application.properties中配置Redis,主要屬性參考如下原始碼:

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
    private int database = 0;   //資料庫名稱,預設為db0
    private String host = "localhost";   //伺服器地址,預設為localhost
    private String password;   //資料庫密碼
    private int port = 6379;    //連線埠號
    private int timeout;   
    private Pool pool;    //連線池
    private Sentinel sentinel;
}