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

相关推荐
等一场春雨9 分钟前
Java设计模式 十二 享元模式 (Flyweight Pattern)
java·设计模式·享元模式
努力搬砖的程序媛儿2 小时前
uniapp悬浮可拖拽按钮
java·前端·uni-app
上海拔俗网络2 小时前
“AI开放式目标检测系统:开启智能识别新时代
java·团队开发
天天向上杰2 小时前
简识Redis 持久化相关的 “Everysec“ 策略
数据库·redis·缓存
Leaf吧2 小时前
springboot 配置多数据源以及动态切换数据源
java·数据库·spring boot·后端
java1234_小锋3 小时前
Java中如何安全地停止线程?
java·开发语言
栗子~~3 小时前
基于quartz,刷新定时器的cron表达式
java
杨过姑父3 小时前
Servlet3 简单测试
java·servlet
chengxuyuan666663 小时前
python基础语句整理
java·windows·python
一只会飞的猪_3 小时前
国密加密golang加密,java解密
java·开发语言·golang