Spring Boot為Redis的Lettuce和Jedis客戶端庫提供了基本的自動配置,並且可以使用Spring Data Redis完成更多的操作。本篇將介紹如何整合Redis及使用Redis實現簡單的查詢緩存,主要包括以下7部分內容:
個人理解的緩存是指用於存儲頻繁使用的數據的空間,關注點是存儲數據的空間和使用頻繁的數據。緩存技術,簡單的說就是先從緩存中查詢數據是否存在,存在則直接返回,不存在再執行相應的操作獲取數據,並將獲取的數據存儲到緩存中,它是一種提升系統性能的重要方法。
Redis是一個開源的、內存存儲key-value類型的數據結構伺服器,可用作資料庫、高速緩存和消息隊列代理。它支持的數據類型有字符串、哈希表、列表、集合、有序集合等,同時通過Redis Sentinel提供高可用,通過Redis Cluster提供分區功能。
Lettuce是一種可伸縮、線程安全、完全非阻塞的Redis客戶端,多個線程可以共享同一個RedisConnection。它利用Netty NIO框架來高效地管理多個連接,從而提供了異步和同步數據訪問方式,用於構建非阻塞的反應性應用程式。 整合Redis,可以通過使用spring-boot-starter-data-redis,這種方式下,Spring Boot默認使用的Redis客戶端是Lettuce。
Spring Data是Spring的一個主要項目,目的是為了簡化構建基於Spring框架應用的數據訪問,包括非關係資料庫、Map-Reduce框架、雲數據服務等,另外也包含對關係資料庫的訪問支持。Spring Data Redis是Spring Data項目中的一個主要模塊,它提供了從Spring應用程式中輕鬆配置和訪問Redis的功能、提供了與應用交互的低級和高級抽象,使開發者擺脫了對基礎結構的關注,例如提供了RedisCacheManager。
從Spring3.1開始,Spring框架提供了對Cache的支持,提供了一個對緩存使用的抽象,通過在既有代碼中添加少量它定義的各種annotation,即能夠達到緩存方法的返回對象的作用。提供的主要註解有@Cacheable、@CachePut、@CacheEvict和@Caching,具體見表1。
表1
@Cacheable的常用屬性及說明如表2所示。
表2
SpEL表達式可以獲取的值如表3所示。
表3
@CachePut的常用屬性同@Cacheable。 @CacheEvict的常用屬性見表4。
表4
當需要在類上或方法上同時使用多個註解時,可以使用@Caching,如@Caching(cacheable = @Cacheable("User"), evict = {@CacheEvict("Member"), @CacheEvict(value = "Customer", allEntries = true)})
在pom.xml或build.gradle中添加spring-boot-starter-data-redis依賴即可,默認使用Lettuce客戶端,依賴管理將會自動下載Lettuce對應的jar,例如在build.gradle文件中添加如下依賴:
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.0.0.RELEASE'
在application.properties或application.yml中添加Redis服務配置,例如在application.properties中添加如下基礎配置:
#Redis伺服器主機地址
spring.redis.host=127.0.0.1
#Redis服務連接密碼
spring.redis.password=123456
#Redis對外服務埠
spring.redis.port=6379
更多Redis的高級配置(哨兵模式、主從)可以在spring-boot-autoconfigure包的spring-configuration-metadata.json中查看。
spring-configuration-metadata.json
編寫業務代碼實現簡單的查詢緩存:
@Service
public class BankServiceImpl implements BankService {
@Autowired
private BankMapper bankMapper;
@Cacheable(value = "bank", key = "'BankId_' + #id", condition = "#id<=100")
@Override
public Bank findBy(Long id) {
return bankMapper.findById(id);
}
}
在application.properties或application.yml中配置一些緩存的配置,例如在application.properties添加如下配置:
#在寫入Redis時是否要使用key前綴
spring.cache.redis.use-key-prefix=true
#key前綴
spring.cache.redis.key-prefix=banks_
#是否允許null值
spring.cache.redis.cache-null-values=false
#緩存有效時間,單位毫秒,默認長久有效
spring.cache.redis.time-to-live=5000
當Redis可用並正確配置,應用啟動時,Spring Boot會自動配置一個RedisCacheManager,這個CacheManager會在第一次寫入時默認創建緩存。上面的查詢緩存代碼只是一個簡單的Redis使用示例,當然你也可以在代碼中自動注入RedisConnectionFactory、StringRedisTemplate或RedisTemplate實例,使用它們完成更多的擴展需求。
推薦閱讀:
關注我[Java實戰技術],專注分享Java基礎原理分析、實戰技術、微服務架構、分布式系統構建。