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

相关推荐
一方~4 分钟前
XML语言
xml·java·web
LSL666_5 分钟前
Java——多态
java·开发语言·多态·内存图
麓殇⊙8 分钟前
CurrentHashMap的整体系统介绍及Java内存模型(JVM)介绍
java·开发语言·jvm
Python私教32 分钟前
Python函数:从基础到进阶的完整指南
java·服务器·python
rit84324991 小时前
Java中的分布式缓存与Memcached集成实战
java·分布式·缓存
LSL666_1 小时前
Java——包装类
java·开发语言·包装类
caihuayuan51 小时前
Vue生命周期&脚手架工程&Element-UI
java·大数据·spring boot·后端·课程设计
故事很腻i1 小时前
RabbitMQ 消息不重复消费和顺序性
java·rabbitmq
钢铁男儿2 小时前
C# 方法(值参数和引用参数)
java·前端·c#
csdn_freak_dd2 小时前
POI创建Excel文件
java·excel