欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot中JetCache的使用方法小結(jié)

 更新時間:2025年10月27日 10:58:01   作者:No8g攻城獅  
本文主要介紹了springboot中JetCache的使用方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、背景描述

 今天來介紹一下由 Alibaba 開源的一款緩存框架 JetCache。其號稱比 Spring Cache 用起來更加好用,在我使用之后發(fā)現(xiàn)確實比較好用,步驟也非常簡單。

JetCache 是一個基于Java 的緩存系統(tǒng)封裝,提供統(tǒng)一的API和注解來簡化緩存的使用。 JetCache 提供了比 SpringCache 更加強大的注解,可以原生的支持 TTL、兩級緩存、分布式自動刷新,還提供了 Cache 接口用于手工緩存操作。 當(dāng)前有四個實現(xiàn),RedisCache、TairCache(此部分未在github開源)、CaffeineCache(in memory)和一個簡易的LinkedHashMapCache(in memory),要添加新的實現(xiàn)也是非常簡單的。

二、JetCache特點與要求

2.1 JetCache的特點

以下簡單描述一下JetCache的特點,方便在使用之前做些簡單的了解:

  • 通過一致的 Cache API 操作緩存。
  • 在方法上面使用注解,就可以實現(xiàn) TTL 和兩級緩存。
  • 使用注釋創(chuàng)建和配置 Cache 實例。
  • 自動收集 Cache 實例和方法緩存的訪問統(tǒng)計信息。
  • key 生成和 value 序列化的策略可以定制。
  • 分布式緩存自動刷新和分布式鎖定。(2.2)
  • 使用 Cache API 進行異步訪問。(2.2版本以上,redis客戶端)
  • 支持 Spring Boot。

2.2 JetCache的要求

  • JetCache需要JDK1.8、Spring Framework4.0.8以上版本。
  • Spring Boot為可選,需要1.1.9以上版本。
  • 如果不使用注解(僅使用jetcache-core),Spring Framework也是可選的,此時使用方式與Guava/Caffeine cache類似。

三、使用步驟

以下案例分別為使用 spring boot 的項目,另外一個是未使用 spring boot 的項目:

3.1 spring boot 項目

使用步驟以 spring boot 項目為例:

3.1.1 引入依賴

現(xiàn)在目前最新的版本是 2.7.0.M1,以后還會繼續(xù)更新,如果想使用最新版本的可以去 maven 的中央倉庫下載哈

        <!-- jet cache-->
        <dependency>
            <groupId>com.alicp.jetcache</groupId>
            <artifactId>jetcache-starter-redis</artifactId>
            <version>2.7.0.M1</version>
        </dependency>

3.1.2 application.yml配置

先來張圖記錄一下配置,當(dāng)然也可以直接從圖下面的配置里粘貼,哈哈

如果想直接復(fù)制粘貼的話,從下面的文本框中 cv 一下(記得修改redis的地址和用戶名密碼哈)即可。

jetcache:
  statIntervalMinutes: 15
  areaInCacheName: false
  local:
    default:
      type: linkedhashmap
      keyConvertor: fastjson
      limit: 1000
  remote:
    default:
      type: redis
      keyConvertor: fastjson
      valueEncoder: java
      valueDecoder: java
      poolConfig:
        minIdle: 5
        maxIdle: 20
        maxTotal: 50
      database: 16 # 連接工廠使用的數(shù)據(jù)庫索引
      host: xxx # 此處需要修改哈
      port: xxx # 此處需要修改哈
      password: xxx # 此處需要修改哈

3.1.3 啟動類注解

@EnableMethodCache(basePackages = "com.iot.back.message")

3.1.4 方法上添加注解

expire表示返回值User對象,將在3600秒后過期,JetCache默認使用所有入?yún)⑸删彺娴膋ey。

3.2 未使用 Spring boot 的項目

以下是未使用 SpringBoot 的配置方式,如果沒有使用spring boot,可以按下面的方式配置(這里使用jedis客戶端連接redis為例)。

3.2.1 引入依賴

<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-anno</artifactId>
    <version>2.6.4</version>
</dependency>
<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-redis</artifactId>
    <version>2.6.4</version>
</dependency>

3.2.2 編寫配置類

配置了這個JetCacheConfig類以后,可以使用@CreateCache和@Cached注解。

package com.company.mypackage;

import java.util.HashMap;
import java.util.Map;

import com.alicp.jetcache.anno.CacheConsts;
import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import com.alicp.jetcache.anno.support.GlobalCacheConfig;
import com.alicp.jetcache.anno.support.SpringConfigProvider;
import com.alicp.jetcache.embedded.EmbeddedCacheBuilder;
import com.alicp.jetcache.embedded.LinkedHashMapCacheBuilder;
import com.alicp.jetcache.redis.RedisCacheBuilder;
import com.alicp.jetcache.support.FastjsonKeyConvertor;
import com.alicp.jetcache.support.JavaValueDecoder;
import com.alicp.jetcache.support.JavaValueEncoder;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.util.Pool;

@Configuration
@EnableMethodCache(basePackages = "com.company.mypackage")
@EnableCreateCacheAnnotation
public class JetCacheConfig {

    @Bean
    public Pool<Jedis> pool(){
        GenericObjectPoolConfig pc = new GenericObjectPoolConfig();
        pc.setMinIdle(2);
        pc.setMaxIdle(10);
        pc.setMaxTotal(10);
        return new JedisPool(pc, "localhost", 6379);
    }

    @Bean
    public SpringConfigProvider springConfigProvider() {
        return new SpringConfigProvider();
    }

    @Bean
    public GlobalCacheConfig config(Pool<Jedis> pool){
    // public GlobalCacheConfig config(SpringConfigProvider configProvider, Pool<Jedis> pool){ // for jetcache 2.5 
        Map localBuilders = new HashMap();
        EmbeddedCacheBuilder localBuilder = LinkedHashMapCacheBuilder
                .createLinkedHashMapCacheBuilder()
                .keyConvertor(FastjsonKeyConvertor.INSTANCE);
        localBuilders.put(CacheConsts.DEFAULT_AREA, localBuilder);

        Map remoteBuilders = new HashMap();
        RedisCacheBuilder remoteCacheBuilder = RedisCacheBuilder.createRedisCacheBuilder()
                .keyConvertor(FastjsonKeyConvertor.INSTANCE)
                .valueEncoder(JavaValueEncoder.INSTANCE)
                .valueDecoder(JavaValueDecoder.INSTANCE)
                .jedisPool(pool);
        remoteBuilders.put(CacheConsts.DEFAULT_AREA, remoteCacheBuilder);

        GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig();
        // globalCacheConfig.setConfigProvider(configProvider); // for jetcache 2.5
        globalCacheConfig.setLocalCacheBuilders(localBuilders);
        globalCacheConfig.setRemoteCacheBuilders(remoteBuilders);
        globalCacheConfig.setStatIntervalMinutes(15);
        globalCacheConfig.setAreaInCacheName(false);

        return globalCacheConfig;
    }
}

3.3 屬性表

關(guān)于配置文件和注解里的每個字段含義詳情請移步另一篇文章,特別詳細的說明解釋JetCache的配置說明和注解屬性說明

@Cached注解和@CreateCache的屬性非常類似,但是多幾個:

屬性默認值說明
area“default”如果在配置中配置了多個緩存area,在這里指定使用哪個area
name未定義指定緩存的唯一名稱,不是必須的,如果沒有指定,會使用類名+方法名。name會被用于遠程緩存的key前綴。另外在統(tǒng)計中,一個簡短有意義的名字會提高可讀性。
key未定義使用SpEL指定key,如果沒有指定會根據(jù)所有參數(shù)自動生成。
expire未定義超時時間。如果注解上沒有定義,會使用全局配置,如果此時全局配置也沒有定義,則為無窮大
timeUnitTimeUnit.SECONDS指定expire的單位
cacheTypeCacheType.REMOTE緩存的類型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定義為BOTH,會使用LOCAL和REMOTE組合成兩級緩存
localLimit未定義如果cacheType為LOCAL或BOTH,這個參數(shù)指定本地緩存的最大元素數(shù)量,以控制內(nèi)存占用。如果注解上沒有定義,會使用全局配置,如果此時全局配置也沒有定義,則為100
localExpire未定義僅當(dāng)cacheType為BOTH時適用,為內(nèi)存中的Cache指定一個不一樣的超時時間,通常應(yīng)該小于expire
serialPolicy未定義指定遠程緩存的序列化方式??蛇x值為SerialPolicy.JAVA和SerialPolicy.KRYO。如果注解上沒有定義,會使用全局配置,如果此時全局配置也沒有定義,則為SerialPolicy.JAVA
keyConvertor未定義指定KEY的轉(zhuǎn)換方式,用于將復(fù)雜的KEY類型轉(zhuǎn)換為緩存實現(xiàn)可以接受的類型,當(dāng)前支持KeyConvertor.FASTJSON和KeyConvertor.NONE。NONE表示不轉(zhuǎn)換,F(xiàn)ASTJSON可以將復(fù)雜對象KEY轉(zhuǎn)換成String。如果注解上沒有定義,會使用全局配置。
enabledtrue是否激活緩存。例如某個dao方法上加緩存注解,由于某些調(diào)用場景下不能有緩存,所以可以設(shè)置enabled為false,正常調(diào)用不會使用緩存,在需要的地方可使用CacheContext.enableCache在回調(diào)中激活緩存,緩存激活的標(biāo)記在ThreadLocal上,該標(biāo)記被設(shè)置后,所有enable=false的緩存都被激活
cacheNullValuefalse當(dāng)方法返回值為null的時候是否要緩存
condition未定義使用SpEL指定條件,如果表達式返回true的時候才去緩存中查詢
postCondition未定義使用SpEL指定條件,如果表達式返回true的時候才更新緩存,該評估在方法執(zhí)行后進行,因此可以訪問到#result

四、依賴哪個Jar?

  • jetcache-anno-api:定義jetcache的注解和常量,不傳遞依賴。如果你想把Cached注解加到接口上,又不希望你的接口jar傳遞太多依賴,可以讓接口jar依賴jetcache-anno-api。
  • jetcache-core:核心api,完全通過編程來配置操作Cache,不依賴Spring。兩個內(nèi)存中的緩存實現(xiàn)LinkedHashMapCache和CaffeineCache也由它提供。
  • jetcache-anno:基于Spring提供@Cached和@CreateCache注解支持。
  • jetcache-redis:使用jedis提供Redis支持。
  • jetcache-redis-lettuce(需要JetCache2.3以上版本):使用lettuce提供Redis支持,實現(xiàn)了JetCache異步訪問緩存的的接口。
  • jetcache-starter-redis:Spring Boot方式的Starter,基于Jedis。
  • jetcache-starter-redis-lettuce(需要JetCache2.3以上版本):Spring Boot方式的Starter,基于Lettuce。

參考文檔:《JetCache官方文檔》

到此這篇關(guān)于springboot中JetCache的使用方法小結(jié)的文章就介紹到這了,更多相關(guān)springboot JetCache使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kotlin 和 Java 混合開發(fā)入門教程

    Kotlin 和 Java 混合開發(fā)入門教程

    這篇文章主要介紹了入門 Kotlin 和 Java 混合開發(fā),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Spring Boot中RedisTemplate的使用示例詳解

    Spring Boot中RedisTemplate的使用示例詳解

    RedisTemplate.opsForHash()是RedisTemplate類提供的用于操作Hash類型的方法,它可以用于對Redis中的Hash數(shù)據(jù)結(jié)構(gòu)進行各種操作,如設(shè)置字段值、獲取字段值、刪除字段值等,本文介紹Spring Boot中RedisTemplate的使用,感興趣的朋友一起看看吧
    2023-10-10
  • Maven依賴管理的用法介紹

    Maven依賴管理的用法介紹

    依賴管理是項目管理中非常重要的一環(huán)。幾乎任何項目開發(fā)的時候需要都需要使用到庫。而這些庫很可能又依賴別的庫,這樣整個項目的依賴形成了一個樹狀結(jié)構(gòu),而隨著這個依賴的樹的延伸和擴大,一系列問題就會隨之產(chǎn)生
    2022-08-08
  • 開發(fā)10年,全記在這本Java進階寶典里了

    開發(fā)10年,全記在這本Java進階寶典里了

    這篇文章主要給大家分享介紹了這本Java進階寶典里,是開發(fā)10年總結(jié)出來的,文中通過圖文介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2019-04-04
  • Protostuff序列化和反序列化的使用說明

    Protostuff序列化和反序列化的使用說明

    今天小編就為大家分享一篇關(guān)于Protostuff序列化和反序列化的使用說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • SpringBoot使用MyBatis的XML文件進行SQL語句編寫

    SpringBoot使用MyBatis的XML文件進行SQL語句編寫

    在現(xiàn)代 Java Web 開發(fā)中,Spring Boot 和 MyBatis 是兩個非常流行的技術(shù)框架,本文將詳細介紹如何在 Spring Boot 項目中使用 MyBatis 的 XML 文件來編寫 SQL 語句,感興趣的可以了解下
    2025-07-07
  • java 面試題閏年判斷詳解及實例

    java 面試題閏年判斷詳解及實例

    這篇文章主要介紹了java面試題 閏年判斷的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • idea 列編輯模式取消的操作

    idea 列編輯模式取消的操作

    這篇文章主要介紹了idea 列編輯模式取消的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • JSON數(shù)據(jù)轉(zhuǎn)換成Java對象的方法

    JSON數(shù)據(jù)轉(zhuǎn)換成Java對象的方法

    就目前來講,將Java對象轉(zhuǎn)換成JSON對象還是相當(dāng)簡單的,但是 將JSON對象轉(zhuǎn)換成Java對象,就相對比較復(fù)雜了些
    2014-03-03
  • java性能優(yōu)化之分代回收

    java性能優(yōu)化之分代回收

    這篇文章主要介紹了java性能優(yōu)化之分代回收,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07

最新評論