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

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

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表达式来计算值。这样的配置可以提高缓存的性能,同时通过设置过期时间和统计功能来优化缓存的使用。

http://www.lryc.cn/news/498967.html

相关文章:

  • React基础知识四 Hooks
  • 线性代数中的谱分解
  • Redis 数据结结构(一)—字符串、哈希表、列表
  • 【Python】用Python和Paramiko实现远程服务器自动化管理
  • PDF处理的创新工具:福昕低代码平台尝鲜
  • openstack创建浮动IP全过程
  • nginx漏洞修复
  • Jackson - 序列化时更改字段名称
  • 策略模式实战 - 猜拳游戏
  • AWS ECS Task 添加 Prometheus 监控采集配置详细指南
  • 5. 一分钟读懂“工厂方法模式”
  • 基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人
  • C语言学习:速通指针(2)
  • windows 上ffmpeg编译好的版本选择
  • Java设计模式笔记(二)
  • Vue CLI的作用
  • 短视频矩阵系统开发|技术源代码部署
  • Erlang socket编程(二)
  • 工业检测基础-线扫相机和面阵相机参数及应用
  • 【无标题】建议用坚果云直接同步zotero,其他方法已经过时,容易出现bug
  • 基于STM32设计的智能宠物喂养系统(华为云IOT)_273
  • cesium truf 利用缓冲如何将一个点缓冲成一个方形
  • HarmonyOS 5.0应用开发——Ability与Page数据传递
  • 【推荐算法】推荐系统的评估
  • 鸿蒙:实现类似Android.9图的图片资源呈现
  • ros2人脸检测
  • Pillow:强大的Python图像处理库
  • 微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算
  • 为什么类 UNIX 操作系统通常内置编译器?为什么 Windows 更倾向于直接使用二进制文件?
  • 吉林大学23级数据结构上机实验(第7周)