`

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

 
阅读更多


 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

说明

(1)Spring Boot 版本:2.0.3.RELEASE

(2)jetcache版本:2.5.2

(3)JDK:1.8

前言

       在前一篇文章中介绍了在Spring Boot中怎么使用JetCache,但是对于实际的使用这是不够的,本篇文章就讲讲一些小技巧。

       在写之前,祝大家父亲节快乐,记得给爸爸打个电话,问声好。有你在,才是梦开始的地方

一、缓存name的指定 

 

对于@CreateCache指定的缓存对象,默认生成的缓存的key的名称是:

c.k.j.d.c.TestCacheInstanceController.cache100

       对于@Cached指定的方法缓存,默认生成的缓存的key的名称是:

c.k.j.d.s.ArticleTypeService.getById(J)[102]

       那么如何指定呢?

@Cached(name="ArticleType.getById")
public ArticleType getById(long id){}

 

缓存的名称name,不是必须的,如果没有指定,会使用类名+方法名。name会被用于远程缓存的key前缀。另外在统计中,一个简短有意义的名字会提高可读性。

二、缓存失效时间

       这个Spring Cache这个就不能指定,未来官方是否会支持呢,给官方提个issue吧。

JetCache就是可以设置的:

@Cached(name="ArticleType.getById",expire=3600)
public ArticleType getById(long id) {}

 

       该Cache实例的默认超时时间定义,注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取无穷大。缓存失效时间单位是秒,3600秒=1小时。

       当然失效时间的单位,你可以通过属性timeUnit(TimeUnit.SECONDS )重新定义的。

 

三、二级缓存

       这里的缓存是内存+远程缓存:

@Cached(name="ArticleType.getById",expire=3600,cacheType=CacheType.BOTH)
public ArticleType getById(long id) {}

这里通过cacheType属性,可以设置缓存方式,可选值:

LOCAL:内存缓存,只会存在内存中,并不会存储到redis中。

REMOTE:远程缓存。

BOTH:内存缓存+远程缓存。

 

四、内存中的元素个数限制

       对于内存中的缓存,是需要控制缓存的个数的,缓存个数过多的话,很有可能就会内存溢出了,那么对于JetCache是可以设置内存缓存的个数的:

@Cached(name="ArticleType.getById",expire=3600,cacheType=CacheType.LOCAL,localLimit=2)
public ArticleType getById(long id) {}

如果cacheTypeCacheType.LOCALCacheType.BOTH,这个参数指定本地缓存的最大元素数量,以控制内存占用。注解上没有定义的时候会使用全局配置,如果此时全局配置也没有定义,则取100

五、非堵塞的获取一个锁

AutoReleaseLock tryLock(K key, long expire, TimeUnit timeUnit)
boolean tryLockAndRun(K key, long expire, TimeUnit timeUnit, Runnable action)

非堵塞的尝试获取一个锁,如果对应的key还没有锁,返回一个AutoReleaseLock,否则立即返回空。如果Cache实例是本地的,它是一个本地锁,在本JVM中有效;如果是redis等远程缓存,它是一个不十分严格的分布式锁。锁的超时时间由expiretimeUnit指定。多级缓存的情况会使用最后一级做tryLock操作。用法如下:

  // 使用try-with-resource方式,可以自动释放锁
  try(AutoReleaseLock lock = cache.tryLock("MyKey",100, TimeUnit.SECONDS)){
     if(lock != null){
        // do something
     }
  }

上面的代码有个潜在的坑是忘记判断if(lock!=null),所以一般可以直接用tryLockAndRun更加简单:

  boolean hasRun = tryLockAndRun("MyKey",100, TimeUnit.SECONDS), () -> {
    // do something
  };

tryLock内部会在访问远程缓存失败时重试,会自动释放,而且不会释放不属于自己的锁,比你自己做这些要简单。当然,基于远程缓存实现的任何分布式锁都不会是严格的分布式锁,不能和基于ZooKeeperConsul做的锁相比。

六、大写API

V get(Kkey)这样的方法虽然用起来方便,但有功能上的缺陷,当get返回null的时候,无法断定是对应的key不存在,还是访问缓存发生了异常,所以JetCache针对部分操作提供了另外一套API,提供了完整的返回值,包括:

CacheGetResult<V> GET(K key);
MultiGetResult<K, V> GET_ALL(Set<? extends K> keys);
CacheResult PUT(K key, V value);
CacheResult PUT(K key, V valuelong expireAfterWrite, TimeUnit timeUnit);
CacheResult PUT_ALL(Map<? extends K, ? extends V> map);
CacheResult PUT_ALL(Map<? extends K, ? extends V> map, long expireAfterWrite, TimeUnit timeUnit);
CacheResult REMOVE(K key);
CacheResult REMOVE_ALL(Set<? extends K> keys);
CacheResult PUT_IF_ABSENT(K key, V valuelong expireAfterWrite, TimeUnit timeUnit);

这些方法的特征是方法名为大写,与小写的普通方法对应,提供了完整的返回值,用起来也稍微繁琐一些。例如:

CacheGetResult<ArticleType> result = cache.GET(articleType.getId());
if(result.isSuccess()) {
    ArticleType articleType2 = result.getValue();
    System.out.println(articleType2);
}else if(result.getResultCode() == CacheResultCode.NOT_EXISTS) {
     System.out.println("cache miss:" + articleType.getId());
}else if(result.getResultCode() == CacheResultCode.EXPIRED) {
     System.out.println("cache expired:" + articleType.getId());
}else {
    System.out.println("cache get error:" + articleType.getId());
}

       好了本篇文章就介绍到这里。

 


历史相关文章:

203. 阿里jetcache

204. jetcache:在Spring Boot中怎么玩?

 

微信公众号「SpringBoot最近更新:

 

214. Spring Security:概述
213.Spring Boot 2.0新特性:配置绑定
212. Spring Boot WebFlux:响应式Spring Data之MongoDB
211. Spring Boot WebFlux:使用篇
210. Spring Boot WebFlux:概念篇
Java8新特性:Stream:实战篇
为了更勇敢,你可以害怕@一禅小和尚
Java8新特性:Stream:基础篇
Java8新特性:方法引用
209. SpringBoot quartz:sqlserver启动只有 DECLARE CURSOR 才允许使用...
风口之上,我是那头猪嘛?
Java8新特性:Lambda表达式: 摸摸里面
Java8新特性:Lambda表达式:过关斩将:使用场景
Java8新特性:Lambda表达式:小试牛刀
下雨天,适合学「Spring Boot」
Java8新特性:接口的默认方法
208. Spring Boot Swagger2:排序 – 漂游记
207. Spring Boot Swagger2:极简方式
我读的书很多,但都没有你好看【一禅录】
206. Spring Boot 2.0 Swagger2:使用
205. Spring Boot 2.0 Swagger2:初识Swagger
当要离开的时候,我却动情了
205. jetcache:你需要知道的小技巧
204. jetcache:在Spring Boot中怎么玩?

 搜索springboot或者扫描以下二维码即可关注:

 

 

分享到:
评论

相关推荐

    springboot整合jetcache完整代码

    首先,整合SpringBoot和JetCache,你需要在项目的pom.xml文件中添加JetCache的依赖。JetCache支持多种缓存后端,如本地缓存(基于EhCache或H2)和远程缓存(如Redis)。以下是一个基本的依赖配置示例: ```xml ...

    c#调用Microsoft.Jet.OLEDB.4.0查看mdb数据库

    要开始使用Microsoft.Jet.OLEDB.4.0,首先需要在C#代码中引用System.Data.OleDb命名空间,这包含对OLEDB连接、命令、数据适配器等对象的支持。接下来,创建一个OleDbConnection对象,指定连接字符串。对于Access...

    通过创建JRO.JetEngine对象实现压缩Access数据库

    要使用JRO.JetEngine对象压缩Access数据库,首先需要在代码中引用Jet运行时库。在VBA中,这可以通过以下步骤完成: 1. 打开VBA编辑器(Alt + F11)。 2. 在"工具"菜单中选择"引用"。 3. 在参考对话框中找到...

    Microsoft.Jet.Oledb.4.0相关mdac的安装文件_最低分

    解决"Microsoft.Jet.OLEDB.4.0 未注册类"或"找不到提供者"的问题,首先需要确认系统中是否安装了支持该组件的 MDAC 版本。通常,较新的 Windows 版本(如 Windows 8 及以上)不再包含对 Jet Engine 的直接支持,而是...

    阿里开源的缓存框架JetCache.pdf

    要使用JetCache,需要在Maven配置文件中添加依赖项: ```xml &lt;groupId&gt;com.alicp.jetcache&lt;/groupId&gt; &lt;artifactId&gt;jetcache-starter-redis &lt;version&gt;2.5.11 ``` 然后,在application.properties文件中配置Jet...

    NHibernate.JetDriver支持Access数据库类库

    在使用NHibernate.JetDriver之前,需要在NHibernate配置文件中指定JetDriver作为数据库供应商,并设置相应的连接字符串。这通常包括数据库文件路径、用户名(如果需要)和密码等信息。 5. **实体映射** ...

    Microsoft.Jet.OLEDB.4.0 及 Microsoft.ACE.OLEDB.12.0 未注册

    C#报"本地未注册Microsoft.Jet.OLEDB.4.0" 及 "未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的解决方法

    jetcache.zip

    jetcache原生不支持通过配置文件动态修改框架的缓存类型,在某些业务场景下切换一次缓存需要修改代码来实现,这是在原有jetcache2.6.0版本上进行扩展的maven编译包,将包下载下来按照路径复制进去即可正常使用,...

    CPC客户端打开报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序.doc

    标题中的"CPC客户端打开报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序"是指在尝试运行CPC(China Patent Cooperation)客户端时,系统返回了一个错误信息,表明缺少一个名为"Microsoft.Jet.OLEDB....

    jetcache-demo:jetcache弹簧靴

    【jetcache】是一个高性能、轻量级的Java缓存框架,设计用于简化应用程序中的缓存管理,尤其在微服务架构中。它与Spring Boot的集成非常紧密,通过`jetcache-boot-starter`模块,可以方便地在Spring Boot应用中启用...

    jetcache:JetCache是​​一个Java缓存框架

    JetCache是​​Java缓存抽象,可为各种缓存解决方案提供一致的用法。 它提供的注释比Spring Cache中的注释更强大。 JetCache中的注释支持本地TTL,两级缓存和分布式自动刷新,您也可以手动编写Cache实例。 当前有四...

    保存到Access数据库,Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\汽车信息.mdb;Persist Security Info=False"

    保存到Access数据库,Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\汽车信息.mdb;Persist Security Info=False" Adodc1.RecordSource = "select * from 汽车信息表" ...

    x64的系统配置IIS未注册Microsoft.Jet.OLEDB.4.0

    在x64系统上配置IIS时,可能会遇到未注册Microsoft.Jet.OLEDB.4.0提供程序的错误,该错误会导致系统无法正常使用ACCESS数据库。本文将详细介绍该错误的解决方案。 一、问题描述 在WIN 2008 R2 x64操作系统上,使用...

    JetCache是一个基于Java的缓存系统封装提供统一的API和注解来简化缓存的使用

    **JetCache 概述** JetCache 是一个专为 Java 应用设计的高效、轻量级的缓存系统封装框架,旨在简化缓存的管理和使用。它通过提供统一的 API 接口和注解,使得开发者能够快速地在项目中集成缓存功能,提升应用程序...

    IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序

    在WIN7 X64平台IIS7.5,使用Asp.net连接access数据库时候,提示:未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该...

    Set读入access数据库程序(VB6.0源代码编写)strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\text.mdb;Persist Security Info=False"

    标签中的字符串`strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\text.mdb;Persist Security Info=False"`是一个典型的数据库连接字符串,用于连接到Access数据库(.mdb文件)。这个字符...

    NHibernate.JetDriver(基于NHibernate 3.1)

    让NHibernate支持Access数据库的驱动程序,源自Hibernate官方,但官方早不支持了(已从NHibernate主类库剔除),这个是基于NHibernate 3.1.0.4000的,需要NHibernate其他版本的话,请打开解决方案引入不同版本的...

    access sql,access支持的sql语句,JETSQL40.CHM

    通过深入学习JETSQL40.CHM中的内容,你将能掌握更高级的查询技巧,从而提高工作效率,更好地利用Access的潜力。无论你是初学者还是有经验的数据库专家,这份资源都值得你投入时间去研读和实践。

    eclipse.jet resource

    Eclipse Jet,全称为JSP Template Engine,是Eclipse基金会下的一个项目,主要用来生成动态内容,特别是用于Java服务器端的Web应用开发。Jet引擎允许开发者使用Java语法和模板语言来编写可重用的代码片段,这些代码...

    JetCache is a Java cache framework..zip

    JetCache是一款专为Java开发的缓存框架,它旨在提供高效、稳定且易于使用的缓存解决方案,以提升应用程序的性能和响应速度。在Java应用程序中,缓存是一种常见的技术手段,用于减少对数据库或其他资源的访问频率,...

Global site tag (gtag.js) - Google Analytics