<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      導航

      SpringBoot Redis 實踐指南

      前言

      SpringBoot Cache 是一個很好的緩存框架,可以兼容多種緩存實現,數據量較大的情況下,Redis 應該是最多被使用的。

      本文重點介紹 SpringBoot 和 Redis 整合使用的關鍵流程,并對其中的核心要點給出說明,且附上相應的官方文檔鏈接便于參考。

      添加 Maven 依賴

      在項目 pom.xml 中添加如下配置:

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>
      

      啟用緩存

      在項目 啟動類 中添加如下注解:

      @EnableCaching
      

      配置緩存

      配置 Redis 連接信息

      Redis 連接信息包括地址、端口、超時時間(秒)和連接池等,可以根據需要選取若干配置即可。

      在項目 application.yml 中添加如下配置:

      spring:
        redis:
          host: ${host}
          port: ${port}
          timeout: 3000
          lettuce:
            pool:
              enabled: true
              max-active: 30
      

      SpringBoot 默認使用的 Redis 客戶端是 lettuce,不是 Jedis。如果需要使用連接池的話,還需要額外添加一個 Maven 依賴:

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>${commons-pool2.version}</version>
      </dependency>
      

      Redis 連接配置屬性參考,注意屬性前綴為 spring.redis.*。

      配置緩存信息

      SpringBoot 支持多個不同名稱的緩存,緩存名稱需要預先配置,還可以指定緩存的過期時間。對于 Redis 而言,某個名稱的緩存實際上就是 Redis 中一個或多個以該名稱為前綴的 Key,緩存的過期時間指的就是這部分 Key 的過期時間。

      在項目 application.yml 中添加如下配置:

      spring:
        cache:
          cache-names: "cache1,cache2"
          redis:
            time-to-live: "10m"
      

      緩存配置屬性參考,注意屬性前綴為 spring.cache.redis.*。

      默認情況下,所有緩存的過期時間都是一樣的。如果需要對不同的緩存設置不同的過期時間,可以自己擴展實現,參考官方示例

      使用緩存

      @Cacheable

      SpringBoot Cache 可以幫助我們自動緩存某個方法的結果(返回值),使用時我們只需要在方法上面添加注解 @Cacheable,并且指定緩存名稱即可:

      @Cacheable(cacheNames = {"cos::url"})
      public String generatePresignedUrl(String name) {
        return ...;
      }
      

      緩存名稱為 cos::url,調用方法 generatePresignedUrl 時,SpringBoot Cache 會自動檢查 Redis 中是否已經緩存過該方法的結果,如果已經緩存過,則直接使用緩存中的結果返回,該方法不會執行;如果沒有緩存過,會執行該方法獲取結果,緩存結果之后再返回給調用者。

      Caching

      Key Generation

      Redis 檢查或緩存結果時均需要一個 Key,SpringBoot Cache 使用 緩存名稱(CacheName,如:cos::url)和 參數值(ParameterValue,如:value1)生成 Key,規則如下:

      • 如果方法沒有參數,Key 為 CacheName::SimpleKey [],即:cos::url::SimpleKey [];
      • 如果方法只有一個參數,Key 為 CacheName::ParameterValue,即:cos::url::value1;
      • 如果方法有兩個或兩個以上的參數,Key 為 CacheName::SimpleKey [ParameterValue1,ParameterValue2,...],即:cos::url::SimpleKey [value1,value2];

      Default Key Generation

      sync

      sync 是注解 @Cacheable 的一個屬性,值可以是 true 或 false:

      如果 sync = false(默認),多線程環境下調用方法 generatePresignedUrl 時,Redis 沒有緩存結果的情況下,方法可能會被執行多次;
      如果 sync = true,Redis 沒有緩存結果的情況下,方法 generatePresignedUrl 只會被執行一次。

      Conditional Caching

      condition

      condition 是注解 @Cacheable 的一個屬性,它的值是一個 SpEL 表達式,表達式的計算結果可以是 true 或 false:

      如果表達式的計算結果是 true,表示緩存方法結果;
      如果表達式的計算結果是 false,表示不緩存方法結果;

      Conditional Caching

      SpEL 表達式可以使用方法的參數值,也可以調用該方法所在 Bean 的其它方法,如:

      #name.length() < 32
      

      方法參數 name 的參數值長度小于 32 時,方法結果才會被緩存;

      condition = "#root.target.check(#name)"
      

      check() 必須是公開的(public),且返回值必須是布爾類型(Boolean);只有 check() 返回值為 true 時,方法結果才會被緩存。

      Available Caching SpEL Evaluation Context

      使用限制

      如果方法 generatePresignedUrl 被位于一個 Bean 的其它方法調用時,緩存不會生效;也就是說,方法 generatePresignedUrl 必須被其它 Bean 的方法調用時,緩存才會生效。原因主要是和 Spring 的代理機制有關,詳情可以參考:Spring Cache @Cacheable - not working while calling from another method of the same bean

      SpringBoot Cache 還支持其它注解,可以參考 Declarative Annotation-based Caching

      RedisTemplate

      如果我們需要自己實現緩存邏輯,SpringBoot Cache 提供了一個封裝 Redis 常用操作的工具模板類:RedisTemplate,并且會創建好它的實例,使用時直接注入即可:

      @Autowired
      private StringRedisTemplate template;
      
      @Autowired
      private RedisTemplate<String, String> template2;
      
      @Autowired
      private RedisTemplate<String, Integer> template3;
      

      RedisTemplate 支持泛型,我們可以根據自己的需求注入一個或多個實例;如果鍵值的類型都是 String,可以直接使用 StringRedisTemplate

      結語

      SpringBoot 整合 Redis 使用時,如果僅僅是需要讀取或緩存數據,直接使用注解的方式相較于使用 RedisTemplate 的方式,可以避免大量的緩存冗余代碼,更多地關注業務邏輯;但是缺點也比較明顯,操控性比較差。實際使用時,可以靈活結合兩者,優先使用注解方式;注解方式受限時,再結合 RedisTemplate 作為補充。

      posted on 2022-05-17 17:21  非著名野生程序員  閱讀(573)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 丁香婷婷激情俺也去俺来也| 午夜福利影院不卡影院| 亚洲精品一区二区三区免| 亚洲人成网线在线播放VA| 西华县| 人人入人人爱| 国产精品久久久久久久久久直播 | 亚洲V天堂V手机在线| 中文字幕丰满乱子无码视频| 爆乳日韩尤物无码一区| 九九热爱视频精品视频| 国产亚洲av夜间福利香蕉149| 亚洲国产成人va在线观看天堂| 综合亚洲网| 亚洲日韩性欧美中文字幕| 日韩高清不卡一区二区三区| 欧洲精品一区二区三区久久| 精品无码黑人又粗又大又长| 国产不卡av一区二区| 麻豆一区二区三区精品视频| 少妇午夜啪爽嗷嗷叫视频| 麦盖提县| 国产寡妇偷人在线观看| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 国产九九视频一区二区三区| 欧美人与动zozo| 成人啪精品视频网站午夜| 精品亚洲欧美高清不卡高清| 午夜福利国产精品视频| 成人国产精品中文字幕| 精品人妻一区二区三区蜜臀| 菠萝菠萝蜜午夜视频在线播放观看 | 亚洲精品岛国片在线观看| 99国产欧美另类久久久精品| 国日韩精品一区二区三区| 在线观看热码亚洲av每日更新| 日本污视频在线观看| 人妻激情一区二区三区四区| 亚洲色欲在线播放一区| 亚洲高请码在线精品av| 亚洲中文字幕久久精品码|