<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 依賴 ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> ~~~ Spring Cache 是在 Spring 3.1 中引?的基于注釋(Annotation)的緩存(Cache)技術,它本質上不是?個 具體的緩存實現?案,?是?個對緩存使?的抽象,通過在既有代碼中添加少量它定義的各種 Annotation, 即能夠達到緩存?法的返回對象的效果 利?了 Spring AOP 的動態代理技術,在項?啟動的時候動態?成它的代理類,在代理類中實現了對應的邏輯 # 緩存注解詳解 * @CacheConfig:設置類級別上共享的一些常見緩存設置 * @Cacheable:觸發緩存寫入 * @CacheEvict:觸發緩存清除 * @Caching 將多種緩存操作分組 * @CachePut:更新緩存(不會影響到方法的運行) ## @Cacheable **需要注意的是當?個?持緩存的?法在對象內部被調?時是不會觸發緩存功能的** 添加在方法上,根據條件添加緩存 * value: 緩存的名稱,不能為空 * cacheNames: 緩存的名稱,和value二選一 * key: 緩存的key,默認為空, 如果指定要按照 SpEL 表達式編寫;如果不指定,則缺省按照?法的所有參數進?組合 * keyGenerator: 指定key的生成策略 * cacheManager: 指定緩存管理器 * cacheResolver: 指定獲取解析器 * condition: 條件符合則緩存, 默認為空,既表示全部都加?緩存,?持SpEL * unless: 條件符合則不緩存 * sync: 是否使用異步模式 默認false **保存方法緩存結果** ~~~ @Cacheable(value = "index", condition = "#name.length() <= 4") @RequestMapping(value = "/index", method = RequestMethod.GET) public String index(String name) { System.out.println("沒有走緩存"); return "hello world"; } ~~~ 輸入url: [http://127.0.0.1:10010/index?name=11](http://127.0.0.1:10010/index?name=11) 第?次輸出欄輸出:沒有?緩存! 再次執??輸出,表明已經?緩存 然后把name參數改大于4個字符,他就走緩存了 **緩存數據庫** 一般用于查詢操作,根據key查詢緩存. 1. 如果key不存在,查詢db,并將結果更新到緩存中。 2. 如果key存在,直接查詢緩存中的數據。 ~~~ @RequestMapping("/getUsers") @Cacheable(value="usersCache",key="#nickname",condition="#nickname.length() >= 6") public List<User> getUsers(String nickname) { List<User> users=userRepository.findByNickname(nickname); System.out.println("執?了數據庫操作"); return users; } ~~~ Spring ?先檢查 condition 條件是否滿?,如 果不滿?,執??法,返回;如果滿?,在緩存空間中查找使? key 存儲的對象,如果找到,將找到的結果 返回,如果沒有找到執??法,將?法的返回值以 key-value 對象的?式存?緩存中,然后?法返回 ## @CachePut 可以標注在類上和?法上 * value 緩存的名稱 * key 緩存的 key,可以為空,如果指定要按照 SpEL 表達式編寫,如果不指定,則缺省按照?法的所有參數進?組合 * condition 緩存的條件,可以為空,使? SpEL 編寫,返回 true 或者 false,只有為 true 才進?緩存 @Cacheable沒有緩存數據會執行方法后,把結果緩存起來,第二次調用方法不執行方法,直接從緩存中獲取數據并返回. @CachePut每次都會執行方法,不管緩存中有沒有數據,都會把結果緩存. ~~~ //修改數據后更新緩存 @Override @CachePut(cacheNames = "cacheManager", key = "'USER:'+#updateUser.id", unless = "#result == null") public User updateUser(User updateUser) { return repository.save(updateUser); } ~~~ ## @CacheEvict 用來標注在需要清除緩存元素的?法或類上的,當標記在?個類上時表示其中所有的?法的 執?都會觸發緩存的清除操作. 根據key刪除緩存中的數 添加在方法上,根據條件清空緩存 * value: 緩存名稱,不能為空 * cacheNames: 緩存的名稱,與value二選一 * keyGenerator: key的生成器。key/keyGenerator二選一使用 * condition: 觸發條件,支持SpEL * allEntries: true表示清除value中的全部緩存,默認為false * beforeInvocation: 清除操作默認是在對應?法成功執?之后觸發的,即?法如果因為拋出異常?未能成功返回時也不會觸發清 除操作。使? beforeInvocation 可以改變觸發清除操作的時間,當我們指定該屬性值為 true 時,Spring 會在 調?該?法之前清除緩存中的指定元素 * cacheManager: 指定緩存管理器 * cacheResolver: 或者指定獲取解析器 value 表示清除操作是發?在哪些 Cache 上的(對應 Cache 的名稱); key 表示需要清除的是哪個 key, 如未指定則會使?默認策略?成的 key; condition 表示清除操作發?的條件 ~~~ //將所有以 usersCache 為名的緩存全部清除 @RequestMapping("/allEntries") @CacheEvict(value="usersCache", allEntries=true) public List<User> allEntries(String nickname) { List<User> users=userRepository.findByNickname(nickname); System.out.println("執?了數據庫操作"); return users; } ~~~ ## @CacheConfig 作用在類上,為本類的緩存注解配置全局屬性 * cacheNames: 緩存名稱 * keyGenerator: key的生成器 * cacheManager: 緩存管理器 * cacheResolver: 獲取解析 ~~~ //UserServiceImpl的所有緩存注解例如@Cacheable的value值就都為user @CacheConfig(cacheNames?=?"user") @Service publicclass?UserServiceImpl?implements?UserService?{} ~~~ ## @Caching 組合多個緩存注解 ~~~ @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Caching { Cacheable[] cacheable() default {}; CachePut[] put() default {}; CacheEvict[] evict() default {}; } ~~~ # 配置CacheManager 整合redis那有配置
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看