springboot中JetCache的使用方法小结

 更新时间:2025年10月27日 10:58:01   作者:No8g攻城狮  
本文主要介绍了springboot中JetCache的使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、背景描述

 今天来介绍一下由 Alibaba 开源的一款缓存框架 JetCache。其号称比 Spring Cache 用起来更加好用,在我使用之后发现确实比较好用,步骤也非常简单。

JetCache 是一个基于Java 的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache 提供了比 SpringCache 更加强大的注解,可以原生的支持 TTL、两级缓存、分布式自动刷新,还提供了 Cache 接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。

二、JetCache特点与要求

2.1 JetCache的特点

以下简单描述一下JetCache的特点,方便在使用之前做些简单的了解:

  • 通过一致的 Cache API 操作缓存。
  • 在方法上面使用注解,就可以实现 TTL 和两级缓存。
  • 使用注释创建和配置 Cache 实例。
  • 自动收集 Cache 实例和方法缓存的访问统计信息。
  • 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 引入依赖

现在目前最新的版本是 2.7.0.M1,以后还会继续更新,如果想使用最新版本的可以去 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配置

先来张图记录一下配置,当然也可以直接从图下面的配置里粘贴,哈哈

如果想直接复制粘贴的话,从下面的文本框中 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 # 连接工厂使用的数据库索引
      host: xxx # 此处需要修改哈
      port: xxx # 此处需要修改哈
      password: xxx # 此处需要修改哈

3.1.3 启动类注解

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

3.1.4 方法上添加注解

expire表示返回值User对象,将在3600秒后过期,JetCache默认使用所有入参生成缓存的key。

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 属性表

关于配置文件和注解里的每个字段含义详情请移步另一篇文章,特别详细的说明解释JetCache的配置说明和注解属性说明

@Cached注解和@CreateCache的属性非常类似,但是多几个:

属性默认值说明
area“default”如果在配置中配置了多个缓存area,在这里指定使用哪个area
name未定义指定缓存的唯一名称,不是必须的,如果没有指定,会使用类名+方法名。name会被用于远程缓存的key前缀。另外在统计中,一个简短有意义的名字会提高可读性。
key未定义使用SpEL指定key,如果没有指定会根据所有参数自动生成。
expire未定义超时时间。如果注解上没有定义,会使用全局配置,如果此时全局配置也没有定义,则为无穷大
timeUnitTimeUnit.SECONDS指定expire的单位
cacheTypeCacheType.REMOTE缓存的类型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定义为BOTH,会使用LOCAL和REMOTE组合成两级缓存
localLimit未定义如果cacheType为LOCAL或BOTH,这个参数指定本地缓存的最大元素数量,以控制内存占用。如果注解上没有定义,会使用全局配置,如果此时全局配置也没有定义,则为100
localExpire未定义仅当cacheType为BOTH时适用,为内存中的Cache指定一个不一样的超时时间,通常应该小于expire
serialPolicy未定义指定远程缓存的序列化方式。可选值为SerialPolicy.JAVA和SerialPolicy.KRYO。如果注解上没有定义,会使用全局配置,如果此时全局配置也没有定义,则为SerialPolicy.JAVA
keyConvertor未定义指定KEY的转换方式,用于将复杂的KEY类型转换为缓存实现可以接受的类型,当前支持KeyConvertor.FASTJSON和KeyConvertor.NONE。NONE表示不转换,FASTJSON可以将复杂对象KEY转换成String。如果注解上没有定义,会使用全局配置。
enabledtrue是否激活缓存。例如某个dao方法上加缓存注解,由于某些调用场景下不能有缓存,所以可以设置enabled为false,正常调用不会使用缓存,在需要的地方可使用CacheContext.enableCache在回调中激活缓存,缓存激活的标记在ThreadLocal上,该标记被设置后,所有enable=false的缓存都被激活
cacheNullValuefalse当方法返回值为null的时候是否要缓存
condition未定义使用SpEL指定条件,如果表达式返回true的时候才去缓存中查询
postCondition未定义使用SpEL指定条件,如果表达式返回true的时候才更新缓存,该评估在方法执行后进行,因此可以访问到#result

四、依赖哪个Jar?

  • jetcache-anno-api:定义jetcache的注解和常量,不传递依赖。如果你想把Cached注解加到接口上,又不希望你的接口jar传递太多依赖,可以让接口jar依赖jetcache-anno-api。
  • jetcache-core:核心api,完全通过编程来配置操作Cache,不依赖Spring。两个内存中的缓存实现LinkedHashMapCache和CaffeineCache也由它提供。
  • jetcache-anno:基于Spring提供@Cached和@CreateCache注解支持。
  • jetcache-redis:使用jedis提供Redis支持。
  • jetcache-redis-lettuce(需要JetCache2.3以上版本):使用lettuce提供Redis支持,实现了JetCache异步访问缓存的的接口。
  • jetcache-starter-redis:Spring Boot方式的Starter,基于Jedis。
  • jetcache-starter-redis-lettuce(需要JetCache2.3以上版本):Spring Boot方式的Starter,基于Lettuce。

参考文档:《JetCache官方文档》

到此这篇关于springboot中JetCache的使用方法小结的文章就介绍到这了,更多相关springboot JetCache使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Kotlin 和 Java 混合开发入门教程

    Kotlin 和 Java 混合开发入门教程

    这篇文章主要介绍了入门 Kotlin 和 Java 混合开发,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Spring Boot中RedisTemplate的使用示例详解

    Spring Boot中RedisTemplate的使用示例详解

    RedisTemplate.opsForHash()是RedisTemplate类提供的用于操作Hash类型的方法,它可以用于对Redis中的Hash数据结构进行各种操作,如设置字段值、获取字段值、删除字段值等,本文介绍Spring Boot中RedisTemplate的使用,感兴趣的朋友一起看看吧
    2023-10-10
  • Maven依赖管理的用法介绍

    Maven依赖管理的用法介绍

    依赖管理是项目管理中非常重要的一环。几乎任何项目开发的时候需要都需要使用到库。而这些库很可能又依赖别的库,这样整个项目的依赖形成了一个树状结构,而随着这个依赖的树的延伸和扩大,一系列问题就会随之产生
    2022-08-08
  • 开发10年,全记在这本Java进阶宝典里了

    开发10年,全记在这本Java进阶宝典里了

    这篇文章主要给大家分享介绍了这本Java进阶宝典里,是开发10年总结出来的,文中通过图文介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2019-04-04
  • Protostuff序列化和反序列化的使用说明

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

    今天小编就为大家分享一篇关于Protostuff序列化和反序列化的使用说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • SpringBoot使用MyBatis的XML文件进行SQL语句编写

    SpringBoot使用MyBatis的XML文件进行SQL语句编写

    在现代 Java Web 开发中,Spring Boot 和 MyBatis 是两个非常流行的技术框架,本文将详细介绍如何在 Spring Boot 项目中使用 MyBatis 的 XML 文件来编写 SQL 语句,感兴趣的可以了解下
    2025-07-07
  • java 面试题闰年判断详解及实例

    java 面试题闰年判断详解及实例

    这篇文章主要介绍了java面试题 闰年判断的相关资料,需要的朋友可以参考下
    2017-03-03
  • idea 列编辑模式取消的操作

    idea 列编辑模式取消的操作

    这篇文章主要介绍了idea 列编辑模式取消的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • JSON数据转换成Java对象的方法

    JSON数据转换成Java对象的方法

    就目前来讲,将Java对象转换成JSON对象还是相当简单的,但是 将JSON对象转换成Java对象,就相对比较复杂了些
    2014-03-03
  • java性能优化之分代回收

    java性能优化之分代回收

    这篇文章主要介绍了java性能优化之分代回收,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07

最新评论