guava缓存的get方法的回调函数讲解一下

java 复制代码
CacheBuilder.newBuilder()
            //设置缓存初始大小,应该合理设置,后续会扩容
            .initialCapacity(10)
            //最大值
            .maximumSize(100)
            //并发数设置
            .concurrencyLevel(5)
            //缓存过期时间,写入后10分钟过期
            .expireAfterWrite(600,TimeUnit.SECONDS)
            //统计缓存命中率
            .recordStats()
            .build().get(key,()->{videomapper.list()});
复制代码
        这段代码使用了Guava库中的`CacheBuilder`来构建一个缓存,并配置了一些缓存参数。下面我将逐一解释这些参数的作用:
  1. initialCapacity(10)

    • 这个参数设置缓存的初始容量为10。这意味着当缓存被创建时,它将有足够的空间来存储10个元素,而不需要在添加元素时立即进行扩容。合理设置初始容量可以减少在缓存创建后立即进行的扩容操作,提高性能。
  2. maximumSize(100)

    • 这个参数设置了缓存的最大容量为100。当缓存中的元素数量达到这个值时,Guava将根据其淘汰算法(如LRU、LFU等)来决定哪些元素应该被移除以腾出空间。
  3. concurrencyLevel(5)

    • 这个参数设置了缓存支持的并发级别为5。这意味着缓存可以支持最多5个线程同时进行读写操作,而不需要额外的锁。增加并发级别可以提高缓存在高并发环境下的性能,但也会增加内存消耗。
  4. expireAfterWrite(600, TimeUnit.SECONDS)

    • 这个参数设置了缓存项的过期时间。在这个例子中,缓存项在写入后600秒(10分钟)后过期。这意味着如果一个缓存项在写入后10分钟内没有被访问,它将自动从缓存中移除。
  5. recordStats()

    • 这个参数启用了缓存的统计功能。启用后,Guava缓存将记录关于缓存命中率、未命中率等统计信息,这对于监控和优化缓存性能非常有用。
  6. build().get(key, ()-> {videomapper.list()})

    • 这部分代码构建了缓存,并使用get方法来获取键为key的缓存项的值。如果缓存中不存在这个键的值,get方法将调用提供的Supplier(在这个例子中是()->{videomapper.list()})来计算值。这里的Supplier是一个Lambda表达式,它调用videomapper.list()方法来获取值。这个方法可能是用来从数据库或其他数据源获取视频列表。

    • get方法的这种用法是Guava缓存的get方法的一个变体,它允许你提供一个值的供应函数,当缓存未命中时,这个函数会被调用以计算并返回值。

总结来说,这段代码创建了一个具有特定参数配置的Guava缓存,并使用get方法来获取缓存项的值,如果缓存未命中,则通过提供的Lambda表达式来计算值。这样的配置可以提高缓存的性能,同时通过设置过期时间和统计功能来优化缓存的使用。

相关推荐
凸头2 分钟前
以AtomicInteger为例的Atomic 类的底层CAS细节理解
java·jvm·算法
艾派森5 分钟前
基于 Rokid CXR-M SDK 构建 AR 远程专家协作系统:从零实现眼镜端自定义 UI 与实时交互
java
cxyxiaokui00120 分钟前
🔥不止于三级缓存:Spring循环依赖的全面解决方案
java·后端·spring
UCoding25 分钟前
我们来学AI编程 -- vscode开发java
java·vscode·ai编程
一线大码27 分钟前
开发 Java 项目时的命名规范
java·spring boot·后端
neoooo28 分钟前
Apollo兜底口诀
java·后端·架构
程序员小假28 分钟前
什么是线程池?它的工作原理?
java·后端
盖世英雄酱5813635 分钟前
java 深度调试【第一章:堆栈分析】
java·后端
本就一无所有 何惧重新开始1 小时前
Redis技术应用
java·数据库·spring boot·redis·后端·缓存
低音钢琴1 小时前
【SpringBoot从初学者到专家的成长11】Spring Boot中的application.properties与application.yml详解
java·spring boot·后端