首页 > 其他分享 >大厂面试真题-说说caffine缓存的原理和基本使用

大厂面试真题-说说caffine缓存的原理和基本使用

时间:2024-11-02 20:50:08浏览次数:6  
标签:缓存 真题 caffine Caffeine 添加 使用 数据 加载

Caffeine是一个基于Java的高性能缓存库,它提供了快速、高效的本地缓存解决方案。以下是关于Caffeine缓存的原理和基本使用的详细介绍:

一、Caffeine缓存的原理

  1. 数据存储:Caffeine使用内存作为数据存储介质,将缓存的数据存储在本地内存中。这样可以实现快速的数据读取和写入,避免了频繁的磁盘IO操作,提高了缓存的读写性能。
  2. 缓存淘汰策略:Caffeine采用了多种缓存淘汰策略,如基于访问时间、写入时间、大小等进行缓存项的淘汰。这些策略可以根据实际业务需求进行配置,保证缓存中的数据是最有用的数据,避免缓存过期或者存储过多无用数据。具体来说,Caffeine使用了W-TinyLFU算法,该算法结合了LRU和LFU的优点,并解决了它们的缺点。通过采用Count-Min Sketch算法降低频率信息带来的内存消耗,并维护一个PK机制保障新上的热点数据能够缓存。
  3. 并发访问控制:Caffeine使用了一些并发访问控制的技术,比如乐观锁、CAS(Compare and Swap)等,来保证在多线程并发访问时,对缓存数据的读取和更新操作是线程安全的,避免了数据不一致或者并发访问冲突的问题。
  4. 数据加载策略:Caffeine提供了数据加载的策略,当缓存中不存在需要的数据时,可以通过数据加载器进行数据的加载和初始化,以确保缓存中的数据是最新的和完整的。

二、Caffeine缓存的基本使用

  1. 引入依赖:在使用Caffeine之前,需要在项目中引入Caffeine的依赖。例如,在Maven项目中,可以在pom.xml文件中添加Caffeine的依赖。
  2. 构建缓存:使用Caffeine的newBuilder方法构建缓存对象,并配置相关的参数,如缓存的最大容量、写入后的过期时间等。例如:Cache<String, String> cache = Caffeine.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后的过期时间为10分钟 .maximumSize(10000) // 设置缓存的最大容量为10000 .build();
  3. 操作缓存

    • 添加或更新缓存元素:使用put方法可以将一个键值对添加到缓存中,如果键已经存在,则更新其对应的值。
    • 获取缓存元素:使用getIfPresent方法可以根据键获取缓存中的值,如果键不存在,则返回null。也可以使用get方法,如果键不存在,则通过提供的函数生成值并添加到缓存中。
    • 移除缓存元素:使用invalidate方法可以根据键移除缓存中的元素。
  4. 使用LoadingCache:LoadingCache是附加在CacheLoader之上构建的缓存对象,它提供了更加便捷的数据加载方式。当调用getgetAll方法时,如果缓存中不存在对应的元素,则会通过CacheLoader加载数据并添加到缓存中。例如:LoadingCache<String, String> cache = Caffeine.newBuilder() .maximumSize(10000) .expireAfterWrite(10, TimeUnit.MINUTES) .build(key -> create(key)); // 指定CacheLoader // 当调用get或getAll时,若找不到缓存元素,则会统一调用create(key)生成 String value = cache.get("key");

  5. 使用AsyncCache和AsyncLoadingCache:AsyncCache是Cache的异步实现方式,它提供了通过Executor生成缓存元素并返回CompletableFuture的能力。AsyncLoadingCache则是LoadingCache的异步形式。这些异步特性可以使得在缓存计算完成前,不会阻塞主线程的执行。

  6. 缓存统计和监听:Caffeine还提供了缓存统计和监听的功能,可以获取缓存的命中率、加载新值的平均时间等统计信息,并可以设置监听器来监听缓存的添加、更新和移除事件。

综上所述,Caffeine缓存库以其高性能、灵活性和可定制性在Java应用中得到了广泛的应用。通过合理的配置和使用,可以显著提高系统的性能和响应速度。

标签:缓存,真题,caffine,Caffeine,添加,使用,数据,加载
From: https://blog.csdn.net/Chang_Yafei/article/details/143456231

相关文章

  • 《 C++ 修炼全景指南:十八 》缓存系统的技术奥秘:LRU 原理、代码实现与未来趋势
    摘要本篇博客深入解析了LRU(LeastRecentlyUsed)缓存机制,包括其核心原理、代码实现、优化策略和实际应用等方面。通过结合双向链表与哈希表,LRU缓存实现了高效的数据插入、查找与删除操作。文章还对LRU的优化方案进行了详细讨论,包括在不同应用场景下的性能提升、内存优化......
  • 真题练习37-Excel电子表格-全国计算机等级考试一级计算机基础及MS Office应用考试【汪
    第37组请根据题目要求,完成下列操作:打开考生文件夹下的电子表格,按照下列要求完成对此文稿的修饰并保存。1.在考生文件夹下打开EXCEL.XLSX文件:(1)将sheet1工作表的A1:G1单元格合并为一个单元格,内容水平居中;计算2015年和2016年产品销售总量分别置于B15和D15单元格内,分别计算2015......
  • 有Redis为什么还要本地缓存?谈谈你对本地缓存的理解?
    本地缓存是将数据存储在应用程序所在的本地内存中的缓存方式。既然,已经有了Redis可以实现分布式缓存了,为什么还需要本地缓存呢?接下来,我们一起来看。为什么需要本地缓存?尽管已经有Redis缓存了,但本地缓存也是非常有必要的,因为它有以下优点:速度优势:本地缓存直接利用本地内存,......
  • video 标签 缓存优化策略
    在Web开发中,处理视频内容的缓存是一个常见的需求,尤其是在视频播放过程中管理缓存(buffer)以优化用户体验。HTML5的<video>元素及其相关的JavaScriptAPI提供了一些方法来管理和监控视频的缓存状态。HTMLMediaElement缓存(Buffer)<video>元素是HTMLMediaElement接口的一个实......
  • 【原理】Redis热点Key自动发现机制和客户端缓存方案
    作者:京东物流京东物流本文详细讲解下Redis热点key发现机制+客户端缓存的原理。一、redis4.0之基于LFU的热点key发现机制业务中存在访问热点是在所难免的,然而如何发现热点key一直困扰着许多用户,redis4.0为我们带来了许多新特性,其中便包括基于LFU的热点key发现机制。Redis中的L......
  • 11月23日考试!全国GIS应用水平考试一级、二级真题和答案资料分享!
    GIS应用技术测评2024年度下半年全国统一考试将于11月23日举行!历年考试真题与教辅资料分享一级真题及答案二级真题及答案获取GIS资料免费领......
  • 笔试真题——机器人拧魔方模拟
    说明:根据遗留的记忆写出来了此篇文章,可能与原文解释有部分出入,但总体思路一致。题目说明:YYYYRRRRWWWWOOOOGGGGBBBBUUL'第一行为输入为对应F,R,B,L,U,D面的元素颜色第二行输入为翻转的标识符标识符有:F、F'、R、R'、B、B'、L、L'、U、U'、D、D'。分别为对应明的顺时针......
  • 【GeoScene】五、影像TIF创建tpk切片缓存并发布
    阿巴阿巴.....,我这拖延症也是没谁了,还是来个总结吧,好歹让自己以后有迹可循;一定要看到最后再去尝试,一路的坑原本觉得这不简简单单嘛,还需要写?不对,这还需要查教程吗?然后劈里啪啦一通操作......什么鬼啊,这么简单的操作还失败???我的姿势不对?然后又尝试了一次......不出意外一样的问......
  • Redis学习:BigKey、缓存双写一致性更新策略和案例
    Redis学习:BigKey、缓存双写一致性更新策略和案例文章目录Redis学习:BigKey、缓存双写一致性更新策略和案例1.BigKey2.缓存双写一致性更新策略3.缓存双写一致性案例1.BigKey面试题MoreKey不可以使用keys*,要使用SCAN基于游标来查询所有的key通过在redis.con......