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

相关推荐
山猪打不过家猪1 小时前
ASP.NET Core Clean Architecture
java·数据库·asp.net
AllowM1 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
不会Hello World的小苗2 小时前
Java——列表(List)
java·python·list
艾斯比的日常2 小时前
提升接口性能之缓存
缓存
二十七剑3 小时前
jvm中各个参数的理解
java·jvm
东阳马生架构4 小时前
JUC并发—9.并发安全集合四
java·juc并发·并发安全的集合
计算机小白一个4 小时前
蓝桥杯 Java B 组之岛屿数量、二叉树路径和(区分DFS与回溯)
java·数据结构·算法·蓝桥杯
菠菠萝宝5 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
不会Hello World的小苗5 小时前
Java——链表(LinkedList)
java·开发语言·链表
想要打 Acm 的小周同学呀5 小时前
Redis三剑客解决方案
数据库·redis·缓存