欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 人工智能 > caffe >内容正文

caffe

初识caffeine -ag凯发k8国际

发布时间:2024/4/14 caffe 64 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 初识caffeine 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。我们把缓存分为两类:

 

  • 分布式缓存,例如redis:

    • 优点:存储容量更大、可靠性更好、可以在集群间共享

    • 缺点:访问缓存有网络开销

    • 场景:缓存数据量较大、可靠性要求较高、需要在集群间共享

  • 进程本地缓存,例如hashmap、guavacache:

    • 优点:读取本地内存,没有网络开销,速度更快

    • 缺点:存储容量有限、可靠性较低、无法共享

    • 场景:性能要求较高,缓存数据量较小

我们今天会利用caffeine框架来实现jvm进程缓存。

caffeine是一个基于java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前spring内部的缓存使用的就是caffeine。github地址:https://github.com/ben-manes/caffeine

caffeine的性能非常好,下图是官方给出的性能对比:

可以看到caffeine的性能遥遥领先!

缓存使用的基本api:

@test void testbasicops() {// 构建cache对象cache cache = caffeine.newbuilder().build();// 存数据cache.put("gf", "迪丽热巴");// 取数据string gf = cache.getifpresent("gf");system.out.println("gf = " gf);// 取数据,包含两个参数:// 参数一:缓存的key// 参数二:lambda表达式,表达式参数就是缓存的key,方法体是查询数据库的逻辑// 优先根据key查询jvm缓存,如果未命中,则执行参数二的lambda表达式string defaultgf = cache.get("defaultgf", key -> {// 根据key去数据库查询数据return "柳岩";});system.out.println("defaultgf = " defaultgf); }

caffeine既然是缓存的一种,肯定需要有缓存的清除策略,不然的话内存总会有耗尽的时候。

caffeine提供了三种缓存驱逐策略:

  • 基于容量:设置缓存的数量上限

// 创建缓存对象 cache cache = caffeine.newbuilder().maximumsize(1) // 设置缓存大小上限为 1.build();

基于时间:设置缓存的有效时间

// 创建缓存对象 cache cache = caffeine.newbuilder()// 设置缓存有效期为 10 秒,从最后一次写入开始计时 .expireafterwrite(duration.ofseconds(10)) .build();
  • 基于引用:设置缓存为软引用或弱引用,利用gc来回收缓存数据。性能较差,不建议使用。

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

总结

以上是ag凯发k8国际为你收集整理的初识caffeine的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图