深入Spring Boot (十一):整合Redis詳解

2020-11-08 Java實戰技術

Spring Boot為Redis的Lettuce和Jedis客戶端庫提供了基本的自動配置,並且可以使用Spring Data Redis完成更多的操作。本篇將介紹如何整合Redis及使用Redis實現簡單的查詢緩存,主要包括以下7部分內容:

  1. 緩存
  2. Redis
  3. Lettuce
  4. Spring Data Redis
  5. Spring Cache
  6. 整合Redis
  7. 小結

緩存

個人理解的緩存是指用於存儲頻繁使用的數據的空間,關注點是存儲數據的空間和使用頻繁的數據。緩存技術,簡單的說就是先從緩存中查詢數據是否存在,存在則直接返回,不存在再執行相應的操作獲取數據,並將獲取的數據存儲到緩存中,它是一種提升系統性能的重要方法。

Redis

Redis是一個開源的、內存存儲key-value類型的數據結構伺服器,可用作資料庫、高速緩存和消息隊列代理。它支持的數據類型有字符串、哈希表、列表、集合、有序集合等,同時通過Redis Sentinel提供高可用,通過Redis Cluster提供分區功能。

Lettuce

Lettuce是一種可伸縮、線程安全、完全非阻塞的Redis客戶端,多個線程可以共享同一個RedisConnection。它利用Netty NIO框架來高效地管理多個連接,從而提供了異步和同步數據訪問方式,用於構建非阻塞的反應性應用程式。 整合Redis,可以通過使用spring-boot-starter-data-redis,這種方式下,Spring Boot默認使用的Redis客戶端是Lettuce。

Spring Data Redis

Spring Data是Spring的一個主要項目,目的是為了簡化構建基於Spring框架應用的數據訪問,包括非關係資料庫、Map-Reduce框架、雲數據服務等,另外也包含對關係資料庫的訪問支持。Spring Data Redis是Spring Data項目中的一個主要模塊,它提供了從Spring應用程式中輕鬆配置和訪問Redis的功能、提供了與應用交互的低級和高級抽象,使開發者擺脫了對基礎結構的關注,例如提供了RedisCacheManager。

Spring Cache

從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)})

整合Redis

在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基礎原理分析、實戰技術、微服務架構、分布式系統構建。

相關焦點

  • 從零搭建Spring Boot腳手架:整合Redis作為緩存
    依賴集成目前只需要引入下面的依賴即可: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency
  • 開源吧,整合Redis作為緩存搭建Spring Boot框架
    依賴集成目前只需要引入下面的依賴即可: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis
  • Spring boot整合redis單節點
    1、在pom文件中添加redis依賴<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
  • SpringBoot利用spring-boot-starter-data-redis整合Redis
    redis作用在內存,性能極高。SpringBoot同樣可以把Redis整合到項目裡。首先,第一步就是為項目添加Redis依賴。在SpringBoot下有spring-boot-starter-data-redis,使用Redis就相當的簡單。第二步添加上Redis配置信息。
  • 深入Spring Boot (十):整合Mybatis框架詳解
    Spring Boot整合Mybatis支持XML配置和全註解兩種方式,本篇將詳細解說這兩種方式的Mybatis整合,主要包含以下5部分內容:數據源配置;資料庫連接池配置;XML配置方式整合;註解方式整合;
  • Redis整合Spring項目搭建實例
    本文介紹了如何使用註解的方式,將Redis緩存整合到你的Spring項目。首先我們將使用jedis驅動,進而開始配置我們的Gradle。() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE") }}jar { baseName = 'gs-serving-web-content' version = '0.1.0'}sourceCompatibility
  • Redis實戰(1)-SpringBoot2.0整合Redis自定義注入模板操作
    沒錯,它就是目前業界應用相當廣泛的其中一種緩存中間件,也可以算是其中的佼佼者吧,從本篇文章開始,我們將基於SpringBoot2.0整合搭建的微服務項目為奠基,開啟中間件Redis的實戰之路!內容:本篇文章我們將首先基於SpringBoot2.0搭建的項目整合緩存中間件Redis,在項目中加入跟Redis相關的、常見的配置信息,並自定義注入Redis的模板操作組件StringRedisTemplate和RedisTemplate,最終給大夥擼個簡單的Demo並由此開啟Redis的實戰之旅!
  • SpringBoot2.0實戰(21)整合Redis之初體驗Lettuce
    目標整合 Redis 實現對 redis 的增刪查改準備工作安裝 Redis介紹使用 Docker添加 spring-boot-starter-data-redis 的依賴源碼地址本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git
  • SpringBoot2.0實戰(22)整合Redis之實現分布式鎖
    釋放鎖流程目標整合Spring Boot Starter 父工程添加 spring-boot-starter-data-redis源碼地址本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git
  • Spring Boot 如何快速集成 Redis?
    添加依賴使用像 Redis 這類的 NoSQL 資料庫就必須要依賴 spring-data-redis 這樣的能力包,開箱即用,Spring Boot 中都封裝好了:引入spring-boot-starter-data-redis:
  • spring boot使用Redis
    Redis官網:https://redis.io/spring boot 使用Redis添加依賴 <dependency> <groupId>org.springframework.boot
  • Spring Boot 學習筆記,這個太全了
    轉換框架4 Spring boot 全局異常捕捉 5 Spring boot JPA 連接資料庫 6 Spring boot 配置 JPA 7 Spring boot 整合 JPA 保存數據 8 Spring boot 使用 JdbcTemplate 保存數據 9 Spring boot 常用配置 10
  • Spring Boot 2.x基礎教程:使用集中式緩存Redis
    </groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2&
  • Spring Boot 整合 redisson 實現分布式鎖
    面試總是會被問到有沒有用過分布式鎖、redis 鎖,大部分讀者平時很少接觸到,所以只能很無奈的回答 「沒有」。本文通過 Spring Boot 整合 redisson 來實現分布式鎖,並結合 demo 測試結果。首先看下大佬總結的圖:
  • GitHub收藏超30k爆火的spring Boot示例教程,源碼、實戰一把抓
    >spring-boot-memcache-spymemcached:Spring Boot使用spymemcached集成memcache示例spring-boot-webflux:Spring Boot webflux示例spring-boot-elasticsearch:Spring Boot
  • Spring Boot 如何快速集成 Redis 哨兵?
    哨後架構的搭建這裡不展開了,大家可以移步公眾號Java技術棧,關於 Redis 單機、哨後、集群的搭建、以及往期 Redis 和 Spring Boot 集成、分布式鎖實戰教程等在公眾號Java技術棧後臺回復redis進行翻閱。
  • Spring Boot+Redis輕鬆實現接口冪等性
    (有局限性)使用緩存,基於請求參數、session或者token(用戶信息)防止重複提交(使用redis用作緩存時和分布式鎖原理相同)。分布式鎖 -- redis、zookeeper等。用戶信息)防止重複提交五、實現思路自定義註解@RepeatLimiting,把@RepeatLimiting註解作為AOP的切點去攔截所有標註@RepeatLimiting註解的方法,訪問該方法之前我們可以獲取所有的上下文信息(請求參數、session或者token等用戶信息)並根據這些信息按照某個規則生成一個字符串類型的Key(可以自定義且整合了
  • Spring Boot 2.3.5 發布,你跟上了嗎?
    7 Spring boot 整合 JPA 保存數據 13 spring boot 使用模板引擎24 Spring boot 導入 spring XML 配置文件 27 Spring boot starter 詳解28 Spring
  • Spring Boot 2.3.5 發布,你跟上了嗎?
    詳細目錄如下:1 Spring boot helloworld 2 Spring boot 返回 json 數據3 Spring boot 使用其他 json 轉換框架4 Spring boot 全局異常捕捉 5 Spring boot JPA 連接資料庫 6 Spring boot 配置 JPA
  • Spring Boot Redis 實現分布式鎖,真香
    分布式鎖介紹Spring Boot 實現 Redis 分布式鎖在 spring-integration 這個項目中,參考:https://docs.spring.io/spring-integration/docs/5.3.1.RELEASE/reference/html/redis.html34