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;
}