Spring Boot 集成 Redis 實現(xiàn)數(shù)據(jù)緩存
Spring Boot 集成 Redis 實現(xiàn)數(shù)據(jù)緩存,只要添加一些注解方法,就可以動態(tài)的去操作緩存了,減少代碼的操作。
在這個例子中我使用的是 Redis,其實緩存類型還有很多,例如 Ecache、Mamercache、Caffeine 等。
Redis 簡介
Redis 是一個開源,高級的鍵值存儲和一個適用的解決方案,用于構(gòu)建高性能,可擴(kuò)展的 Web 應(yīng)用程序。
Redis 相關(guān)的知識就不在這里贅述了,感興趣的可以公眾號回復(fù) Redis 看下 Redis 系列文章。
下面我們在 Spring Boot 中集成 Redis 來實現(xiàn)數(shù)據(jù)緩存。
Spring Boot 集成 Redis 實現(xiàn)緩存
Spring Boot 集成 Redis 實現(xiàn)緩存主要分為以下三步:
-
加入 Redis 依賴 -
加入 Redis 配置 -
演示 Redis 緩存
加入依賴
首先創(chuàng)建一個項目,在項目中加入 Redis 依賴,項目依賴如下所示(由于使用 Redis 連接池,需額外引入 commons-pool2):
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2
在 spring-boot-starter-data-redis 1.X 版本默認(rèn)使用 Jedis 客戶端,在 2.X 版本默認(rèn)開始使用 Lettuce 客戶端,如果習(xí)慣使用 Jedis 的話,可以從 spring-boot-starter-data-redis 中排除 Lettuce 并引入 Jedis。
加入配置
在配置文件 application.properties 中配置 Redis 的相關(guān)參數(shù),具體內(nèi)容如下:
#Redis 索引(0~15,默認(rèn)為 0)
spring.redis.database=0
spring.redis.host=127.0.0.1
#Redis 密碼,如果沒有就默認(rèn)不配置此參數(shù)
spring.redis.password=
spring.redis.port=6379
#Redis 連接的超時時間
spring.redis.timeout=1000
#連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
spring.redis.lettuce.pool.max-active=20
#連接池最大阻塞等待時間(使用負(fù)值表示沒有限制)
spring.redis.lettuce.pool.max-wait=-1
#連接池中的最大空閑連接
spring.redis.lettuce.pool.max-idle=10
#連接池中的最小空閑連接
spring.redis.lettuce.pool.min-idle=0
接下來在 config 包下創(chuàng)建一個 Redis 配置類 RedisConfig,在配置類上加入注解 @Configuration,注入一個 CacheManager 來配置一些相關(guān)信息,代碼如下:
@Configuration
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(30))
.prefixKeysWith("cache:user:")
.disableCachingNullValues()
.serializeKeysWith(keySerializationPair())
.serializeValuesWith(valueSerializationPair());
return RedisCacheManager.builder(factory)
.withCacheConfiguration("user", redisCacheConfiguration).build();
}
private RedisSerializationContext.SerializationPair
keySerializationPair
()
{
return RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer());
}
private RedisSerializationContext.SerializationPair
