springboot 环境下 jetcache使用详解

Springboot(四十九)SpringBoot3整合jetcache缓存 jetcahe2.7的两级缓存支持更新以后失效其他JVM中的local cache,但多个服务共用redis同一个channel可能会造成广播风暴,需要在这里指定channel,你可以决定多个不同的服务是否共用同一个channel。每个缓存实例的最大元素的全局配置,仅local类型的缓存需要指定。注意是每个缓存实例的限制,而不是全部,比如这里指定100,然后用@CreateCache创建了两个缓存实例(并且注解上没有设置localLimit属性),那么每个缓存实例的限制都是100。序列化器的全局配置。 阅读详情

jetcache

简介
github地址;jetcache 的优势在于比spring cache 提供更加强大的注解操作,并提供两级缓存,本地缓存和远端缓存(redis)以及异步cacheAPI操作,以及其他的TTL等

有些内容来源官网,本文仅供交流和学习

使用

springboot中使用

pom

  <dependency>
            <groupId>com.alicp.jetcache</groupId>
            <artifactId>jetcache-starter-redis-lettuce</artifactId>
            <version>2.6.0</version>
        </dependency>

配置文件

jetcache:
  areaInCacheName: false  #是否加入到cachename中作为前缀
  statIntervalMinutes: 15  #统计间隔时间
  remote:
    default:  #区域area 名
      type: redis.lettuce  #缓存类型
      keyPrefix: test # 全局key前缀
      keyConvertor: fastjson # key序列化
#      valueEncoder: bean:jsonEncoder #value序列化,默认java序列化
#      valueDecoder: bean:jsonDecoder
      readFrom: master #从那些节点读数据,master,masterPreferred,slave,slavePreferred,nearest
      expireAfterWriteInMillis: 1000 # 过期时间,单位毫秒
      #mode: MasterSlave(主从模式) #集群模式
      uri:
        - redis://172.0.0.1:6379
  local:
    default:
      type: caffeine  # 本地缓存使用什么方式,其他还有linkedhashmap
      limit: 100  # 默认100

另外配置类上加注解

// 开启在方法上使用缓存注解
@EnableMethodCache(basePackages = "com.xiaodu.jetcache")

// 开启使用注解方式创建cache
@EnableCreateCacheAnnotation
注解说明
注解属性说明
@cached 缓存数据name缓存实例的名称,可用作显示统计信息和作为key的前缀
area缓存区域,默认为default
key缓存key,使用spel表达式
expire过期时间,如果未配置localExpire则本地缓存和remote缓存都使用此
localExpire本地缓存过期时间
cacheType缓存类型,可选EMOTE(远端), LOCAL(本地), BOTH(二级缓存)
localLimit本地缓存最大数量
cacheNullValue是否缓存null
serialPolicy序列化方式,默认使用全局
condition使用SpEL指定条件,如果表达式返回true的时候才去缓存中查询
@CacheUpdate 更新缓存name缓存实例的名称,可用作显示统计信息和作为key的前缀
area缓存区域,默认default, 一般情况下不需要设置
name同@cached.name,cache实例名
key同@cached.key, 使用spel表达式指定
value使用spel表达式指定缓存数据
condition缓存条件,true更新缓存,false不更新缓存,使用spel指定
@CacheInvalidate 删除缓存同@cacheUpdate一致缓存无效,删除缓存时使用
@CachePenetrationProtect 缓存穿透保护,原理就是并发下加锁,超时时间内只有一个线程能执行,其他线程等待value默认 true, 是否开启
timeout保护时间,默认integer最大值,其他线程等待超时时间,超时后执行方法
timeUnit时间单位, 默认秒
@CacheRefresh 缓存刷新refresh刷新间隔
timeUnit时间单位, 默认秒
stopRefreshAfterLastAccess指定该key多长时间没有访问就停止刷新,如果不指定会一直刷新
refreshLockTimeout类型为BOTH/REMOTE的缓存刷新时,同时只会有一台服务器在刷新,这台服务器会在远程缓存放置一个分布式锁,此配置指定该锁的超时时间,默认 锁超时时间为60s
@CreateCache ,标注在属性上创建缓存,并注入到spring中同 @cached略,详解同@cached

@cached
作用在方法上,类 必须为一个springbean, key 使用spel表达式

    @Cached(area = "default", name = "test.", key = "'str'", expire = 30,
            localExpire =3, cacheType = CacheType.REMOTE, timeUnit = TimeUnit.SECONDS, localLimit = 5,
    /*serialPolicy = ""*/cacheNullValue = true)
    public Object getstr() {
        System.out.println("str...");
        return "str...";
    }

@CacheUpdate
作用在方法上,类 必须为一个springbean, key 和value 使用spel表达式

   @CacheUpdate(name = "test.", key = "'str'" ,value = "#result")
    public Object getstrupdate() {
        return "update";
    }

@CacheRefresh

// 每隔10秒钟 就刷新下缓存
    @Cached(area = "default", name = "test.", key = "'str'", expire = 3,
            localExpire =3, cacheType = CacheType.REMOTE, timeUnit = TimeUnit.SECONDS, localLimit = 5,
    /*serialPolicy = ""*/cacheNullValue = true)
    @CacheRefresh(refresh = 10)
    public Object getstr() {
        System.out.println("str...");
        return "str...";
    }

@CachePenetrationProtect
添加缓存穿透保护 是jvm级别进程级别的的不是 分布式的;只保护本服务并发只有一个获取锁执行,其他等待

     @Cached(area = "default", name = "test.", key = "'str'", expire = 3,
            localExpire =3, cacheType = CacheType.REMOTE, timeUnit = TimeUnit.SECONDS, localLimit = 5)
    @CachePenetrationProtect
    public Object getstr() {
        System.out.println("str...");
        return "str...";
    }

@CacheInvalidate
删除缓存

   @CacheInvalidate(name = "test.", key = "'str'")
    public void delCache() {
        System.out.println("delCache name = test. , key = str");
    }
@createCache使用
添加@EnableCreateCacheAnnotation开启,createCache的属性和cached注解的属性大致一样
常用api操作
// 直接在springbean属性上添加,
 @CreateCache(area = "default", name = "test.createCache.", expire = 3, cacheType = CacheType.BOTH)
    private Cache<String, Object> cache;
	
	// 操作 cahce的所有方法操作, 大写的是异步的,小写的是同步的,不过小写的没返回值的 也是异步的;底层还是调用的异步操作方法,有返回值的也是调用的异步操作方法 不过在获取返回值的时候阻塞了
    public void testCreateCache() {
    	// 添加缓存
        cache.put("key1", "value2");
        // 添加缓存, 并设置超时时间, 若没设置超时时间则以注解上的设置为准
        cache.put("key2", "value2", 10, TimeUnit.SECONDS);
        // 如果key对应的value不存在,则添加缓存value
        cache.putIfAbsent("key1", "newValue2");
        // 如果key对应的value不存在,则通过function 获取,并关联key,添加到缓存
        cache.computeIfAbsent("key1", e -> "computeValue");
		/*
		以上put 添加缓存的操作都是异步的
		*/	
		
		// 同步获取缓存
        Object key1 = cache.get("key1");
        // 异步获取
        CacheGetResult<Object> key11 = cache.GET("key1");
        // 删除缓存
        boolean key2 = cache.remove("key2");
        // 异步删除缓存, isSuccess()会阻塞获取结果
        boolean key21 = cache.REMOVE("key2").isSuccess();
		
		// CompletableFuture 操作;cache的异步操作可以像CompletableFuture一样,进行异步异步操作
		  cache.GET("key1").future()
                .thenComposeAsync(e -> CompletableFuture.runAsync(() -> {
                    System.out.println(e.getResultCode());
                }))
                .thenAccept(e -> {
                    System.out.println("cache thenaccept");
                });
	
		// 分布式锁操作, 这个需要lock.close() 并且需要判断lock是否为null
        try (AutoReleaseLock keyLock = cache.tryLock("keyLock", 10, TimeUnit.SECONDS)) {
            if (keyLock != null) {
                System.out.println("lock");
            }
        }
        // 分布式锁操作, 上述操作的优化版本
        cache.tryLockAndRun("keyLock", 10,TimeUnit.SECONDS, () -> {
            System.out.println("aaa");
        });

        // umwrap 可以包装为原始类,进行缓存操作, 具体能转换为什么类型,请参考实现;注意泛型
        RedisStringCommands<byte[], byte[]> unwrap = cache.unwrap(RedisClusterCommands.class);

		
		// 分布中集群之间只有一个节点获取到锁执行,其他服务获取不到锁不再竞争,此时可以在reids中提供了set(k,v,nx,ex) 命令 可以实现锁操作 jetcache中使用
		cache.putIfAbsent(k, v) 
		
		//  自增等操作,jetcache暂时没做实现 可以使用unwrap 包装后使用
   RedisStringCommands<byte[], byte[]> unwrap = cache.unwrap(RedisClusterCommands.class);
  Long incr = unwrap.incr("key1".getBytes());
  
    }

以上是在springboot项目中使用 redis-lettuce, 也可以使用 jedis ,不过还是推荐使用 redis-lettuce

jetcache - jedis

简单写下吧,基本上和redis-lettuce一致
pom

  <dependency>
            <groupId>com.alicp.jetcache</groupId>
            <artifactId>jetcache-starter-redis</artifactId>
            <version>2.6.0</version>
        </dependency>

配置文件
// 基本配置也一样,jedis 多了一个 pool的配置

jetcache:
  remote:
    default:
      type: redis
      keyConvertor: fastjson
      poolConfig:
        minIdle: 1
        maxIdle: 2
        maxTotal: 3
      host: 172.0.0.1
      port: 6379
  local:
    default:
      type: linkedhashmap

其他看 官网吧; springboot 环境下的jedis支持

以上是jetcache的简单使用,入手简单,若不是在springboot环境下 或者 使用原生的 请参照

SpringBoot 集成 JetCache-Alibaba 实现本地缓存 官网地址官方文档JetCache是由阿里巴巴开源的一款基于 Spring 和 Redis 的分布式缓存框架,提供统一的 API 和注解来简化缓存的使用。JetCache提供了比更加强大的注解,可以原生的支持 TTL、两级缓存、分布式自动刷新,还提供了 Cache 接口用于手工缓存操作。当前有四个实现,RedisCacheTairCache(此部分未在 github 开源)、(in memory) 和一个简易的(in memory),要添加新的实现也是非常简单的通过统一的 API 访问 Cache 系统。 阅读详情

相关推荐

SpringBoot项目实战:用JetCache搞定多级缓存(本地Caffeine+远程Redis)

本文详细介绍了如何在SpringBoot项目中利用JetCache实现多级缓存(本地Caffeine+远程Redis),提升系统性能。通过实战案例和配置技巧,帮助开发者优化缓存策略,解决高并发场景下的性能瓶颈,显著提升QPS并降低GC次数。

weixin_31412781的博客 262

springboot缓存技术--jetCache

这个可以看做一个框架,对其他的缓存进行了整合。 在启动类添加@EnableCreateCacheAnnotation 注解 启动服务器 启动客户端 类似集合的操作

weixin_51351637的博客 2625

【JetCache】从配置到注解:构建高效缓存的实践指南

本文详细介绍了JetCache框架从配置到注解的全面实践指南,帮助开发者构建高效缓存系统。通过多级缓存(本地+远程)和注解驱动(如@Cached)的特性,JetCache能显著提升系统性能,降低数据库压力。文章包含配置示例、核心注解解析、性能优化技巧及真实业务场景解决方案,是Java开发者实现高效缓存的必备参考。

weixin_31960565的博客 221

SpringBoot(5)整合缓存

SpringBoot整合Ehcache缓存,Memcached缓存,jetcache缓存,j2cache缓存

weixin_43994244的博客 1543

达梦库高效去重与主键冲突优化:基于JetCache的二级缓存实践

本文详细介绍了如何利用JetCache二级缓存解决达梦库批量插入中的主键冲突与重复数据问题。通过复合键设计、两级缓存架构和动态批次调整等优化策略,显著提升了数据库写入性能,降低60%的负载压力,适用于高并发实时数据归档场景。

weixin_29210759的博客 351

SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存

上面讲的通过自定义注解的方式实现查询数据库数据缓存,除此之外还有更好的轮子。

BADAO_LIUMANG_QIZHI的博客 2164

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.9 jetcache 远程缓存方案 5.9.1 缓存供应商变更jetcache && 5.9.2 环境准备

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.9 jetcache 远程缓存方案 5.9.1 缓存供应商变更jetcache && 5.9.2 环境准备

代码改变世界 368

使用TEA5767和stm32制作一台数字FM收音机

本节我们来使用stm32控制一款集成收音机芯片TEA5767,来制作一台FM收音机。 TEA5767是一款低功耗立体声收音IC,接收频率76MHz~108MHz(适应日本/美国/欧洲各FM频段选择)并可以使用软件进行静音和消除噪音。 主要电性能指标:工作电压:2.5V~5.0V,工作电流10mA,立体声分离度30dB,信噪比60dB,输出信号电平75mV。支持I2C总线通信、3-wire总线。 1)硬件设计 TEA5767芯片外围需要搭配较多的电阻、电容、电感、晶振等器件,而且高频电路的PCB设

小白白学电子 1万+

JetCache快速使用以及@Cached和@CreateCache的配置说明

JetCache主要通过@Cached和@CreateCache实现缓存,@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。@CreateCache是直接创建一个缓存实例,然后调用put(Tkey, T value)、get(T key)等方法实现缓存。 (1)如果是SpringBoot框架开发: pom文件: <dependency...

ywb201314的专栏 1万+

炸金花游戏(3)--基于EV(期望收益)的简单AI模型

前言:   炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章:  德州扑克AI--Programming Poker AI(译).  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运...

weixin_30377461的博客 2340

基于SpringBoot+Vue的公司考勤管理系统

为什么选择我博主是优快云毕设辅导博客第一人兼开派祖师爷、博主本身从事开发软件开发、有丰富的编程能力和水平。专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流和合作。

m0_71849512的博客 1160

Spring Boot 2.1.4整合JetCache缓存框架实现本地caffeine远程redis存储(一、使用Lettuce)

JetCache是一个阿里巴巴开源的基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用,SpringBoot2.1.4截止到当前为止,Maven仓库发布的整合JetCache的版本为2.6.0.M1,JetCache提供了 本地缓存LinkedHashMapCache和CaffeineCache(一个高性能的 Java 缓存库)两种,远程可以支持Tair,Redis,今天我们就来...

ankeway的博客 9038

单细胞分析R包monocle3服务器安装教程

由于centos7系统yum只能安装到低版本gdal,而monocle3依赖包需要 gdal>2 版本,从gdal官网下载2.4.4版本编译安装。monocle3的安装是通过cole-trapnell-lab安装的,该包挂在github上,需要通过github先安装leidenbase包,需要提前安装devtools包下载工具。接着利用BiocManager安装相应的依赖包,由于这些包的特殊性,所以不要切换到国内Bio_Mirror镜像,否则会找不到,如果一次不成功,缺啥补啥即可。运行 ldconfig。

qq_36608036的博客 1万+

JetCache基于redis使用总结

前言 一.使用配置 1.1.SpringBoot中使用 1.2.未使用SpringBoot中进行应用: 二、代码使用 2.2.1 @CreateCache属性介绍: 2.2.2 @Cached属性介绍: 2.2.3 CacheInvalidate属性介绍: 2.2.4 CacheUpdate注解说明: 2.2.5 CacheRefresh注解说明: 2.2.6 属性配置的一些说明: 2.1创建缓存两级(内存+远程),缓存,控制在50个 2.2一些属性介绍: 结尾 前言 JetCache是阿里巴巴出品现在比较

u010720120的博客 1868

【原创教程】AB上位机FactoryTalk View的使用教程

条形图主要的作用就是根据绑定的变量中数字大小的变化来反映到图形中,随着数字的增加填充的颜色不断上升或随着数字的减小填充的颜色不断下降。绘图功能中常用的功能主要是:数字输入,数字输出,字符输入,字符输出,各种类型的的按钮,条状图,各类控件,系统自带的图形库。颜色指的是根据PLC变量的变化来改变图形的颜色,可以绑定BOOL量来显示两种颜色,也可以绑定字节,字,双字等来显示多种颜色。打开软件后右键点击画面选项然后点击新建则新建出一个画面,画面画好后点击保存并更改标题后新建的画面则会出现在画面选项的文件夹下。

Qinmingyue13的博客 4673

MATLAB 控制 E4438C 信号源的研究

通过 MATLAB,我们可以实现对 E4438C 的远程控制,从而实现更高的自动化和可编程性。总结起来,通过使用 MATLAB 和 Instrument Control Toolbox,我们可以轻松地控制 E4438C 信号源并生成各种类型的信号。需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行更详细的配置和错误处理。此外,MATLAB 还提供了一系列函数和命令,可用于控制 E4438C 信号源的其他功能,如频率调谐、功率设置、调制设置等。您可以根据自己的需求进行相应的配置和控制。

RswtPerl的博客 1012

JetCache快速入门

创建缓存实例 通过@CreateCache注解创建一个缓存实例,默认超时时间是100秒 @CreateCache(expire = 100) private Cache<Long, UserDO> userCache; 用起来就像map一样 UserDO user = userCache.get(123L); userCache.put(123L, user); userC...

很多时候犯错都是在不知情的情况下发生的 1467

【全网首发】2026华为OD双机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

算法大师! 8748

Jetcache快速入门

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

weixin_46425661的博客 1791

STM32实现简单的智能电子相框

具体的代码案例和详细的代码实现超过5000字,无法在此篇文章中提供。但是,你可以参考STM32的官方文档和相应的图形库和多媒体库的文档,以获得更详细的实现细节和代码示例。对于硬件,我们可以选择使用STM32开发板,如STM32F4 Discovery。对于软件开发环境,我们将使用Keil MDK-ARM作为开发工具,并使用STM32CubeMX进行代码配置。在本文中,我们将使用STM32单片机实现一个简单的智能电子相框,包括显示照片、播放视频和音乐功能。接下来,我们将详细描述实现智能电子相框的步骤。

2401_85625565的博客 1004

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

阿里巴巴面向对象缓存框架-JetCache

阿里巴巴面向对象缓存框架-JetCache JetCache JetCache是由阿里巴巴开源的通用缓存访问框架,相较于其他缓存框架该框架最大的特点就是将面向对象的思想应用到了缓存。 JetCache提供的核心能力包括: 提供统一的,类似jsr-107风格的API访问Cache,并可通过注解创建并配置Cach...

honger_hua的博客 2481

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

API方式使用JetCache,测试JetCache性能

以Api方式使用JetCache、测试JetCache本地缓存的性能 本文介绍使用springboot方式使用JetCache 1. 在pom中引入JetCache依赖 <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId> <version>2.6.0</versio

duo-ing的博客 1065

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

205. jetcache:你需要知道的小技巧

【视频&amp;交流平台】 à Spring Boot视频:http://t.cn/R3QepWG à Spring Cloud视频:http://t.cn/R3QeRZc à Spring Boot Shiro视频:http://t.cn/R3QDMbh à Spring Boot交流平台:http://t.cn/R3QDhU0 à Spring Boot 2.0 SpringD...

悟纤学院 3万+

SpringBoot学习笔记(三)

SpringBoot学习笔记(三)

weixin_42594143的博客 485
上一篇: 通过classLoader批量读取文件(文件夹)遇到的问题
下一篇: word 模板替换 poi-tl简单使用
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值