当前位置: 首页 > news >正文

JVM进程缓存 Caffeine

JVM进程缓存 Caffeine

初识Caffeine

Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。

ben-manes/caffeine: A high performance caching library for Java (github.com)

实例代码

@Test
void testBasicOps() {// 创建缓存对象Cache<String, String> cache = Caffeine.newBuilder().build();// 存数据cache.put("gf", "迪丽热巴");// 取数据,不存在则返回nullString gf = cache.getIfPresent("gf");System.out.println("gf = " + gf); // 取数据,包含两个参数:// 参数一:缓存的key// 参数二:Lambda表达式,表达式参数就是缓存的key,方法体是查询数据库的逻辑// 优先根据key查询缓存,如果未命中,则执行参数二的Lambda表达式String defaultGF = cache.get("defaultGF", key -> {// 这里可以去数据库根据 key查询valuereturn "柳岩";});System.out.println("defaultGF = " + defaultGF);
}

缓存驱逐策略

1、基于容量

// 创建缓存对象
Cache<String, String> cache = Caffeine.newBuilder().maximumSize(1) // 设置缓存大小上限为 1 .build();

2、基于时间

// 创建缓存对象
Cache<String, String> cache = Caffeine.newBuilder()// 设置缓存有效期为 10 秒,从最后一次写入开始计时 .expireAfterWrite(Duration.ofSeconds(10)) .build();

3、基于引用:利用GC来回收缓存数据(不推荐)

在默认情况下,当一个缓存元素过期的时候,Caffeine不会自动立即将其清理和驱逐。而是在一次读或写操作后,或者在空闲时间完成对失效数据的驱逐。

实现缓存

1、声明Bean

@Configuration
public class CaffeineConfig {@Beanpublic Cache<Long, Item> itemCache(){return Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).build();}@Beanpublic Cache<Long, ItemStock> stockCache(){return Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).build();}
}

2、使用Cache对象

@Autowired
private Cache<Long, Item> itemCache;
@Autowired
private Cache<Long, ItemStock> stockCache;// ...@GetMapping("/{id}")
public Item findById(@PathVariable("id") Long id) {return itemCache.get(id, key -> itemService.query().ne("status", 3).eq("id", key).one());
}@GetMapping("/stock/{id}")
public ItemStock findStockById(@PathVariable("id") Long id) {return stockCache.get(id, key -> stockService.getById(key));
}
http://www.lryc.cn/news/343161.html

相关文章:

  • c++ 线程交叉场景试验
  • Cell:如何升华你的单细胞数据——PCF空间单细胞蛋白组联合scRNA-seq解析骨髓微环境
  • vue强制刷新组件
  • 分享5款对工作学习有帮助的效率软件
  • redis秒杀(PHP版本)
  • 图形用户界面(GUI)在AI去衣技术中的作用与重要性
  • 如何阅读:一个已被证实的低投入高回报的学习方法的笔记
  • pycharm 安装“通义灵码“并测试
  • React 之 useMemo Hook (九)
  • 短视频矩阵系统源码saas开发--可视化剪辑、矩阵托管、多功能合一开发
  • 百度大模型文心一言api 请求错误码 一览表
  • Unity调用智谱API(简单操作 文本实时翻译)
  • Android 开机启动扫描SD卡apk流程源码分析
  • 如何恢复回收站中被删除的文件?3个恢复策略,实测有用!
  • Unity---版本控制软件
  • 基于大模型的idea提炼:围绕论文和引用提炼idea之ResearchAgent
  • 前端深度扩展
  • 雷军-2022.8小米创业思考-6-互联网七字诀之专注:有所为,有所不为;克制贪婪,少就是多;一次解决一个最迫切的需求
  • 【禅道客户案例】北大软件携手禅道,开启产品化之路新征程
  • 解释泛型(Generics)在Java中的用途
  • 给网站网页PHP页面设置密码访问代码
  • 124.反转链表(力扣)
  • 【数据库原理及应用】期末复习汇总高校期末真题试卷06
  • Offline:IQL
  • 图像涂哪就动哪!Gen-2新功能“神笔马良”爆火,网友:急急急
  • 【管理篇】管理三步曲:任务执行(三)
  • 使用idea管理docker
  • 【Git】Commit后进行事务回滚
  • 一分钟教你学浪app视频怎么缓存
  • stylus详解与引入