【缓存分类以及常见的缓存淘汰策略】

文章目录

缓存分类以及常见的缓存淘汰策略

1、缓存分类

1.1、概述

1)本地缓存:

将缓存数据存储在单个应用程序进程内部的内存中,通常是使用Java集合类如HashMap、ConcurrentHashMap等进行实现。本地缓存的优点是速度快、易于实现,并且不需要网络传输,但无法跨越多个应用程序进程共享数据。

2)分布式缓存:

将缓存数据存储在多台服务器上,通过网络传输数据实现缓存共享。常见的分布式缓存框架有Redis、Memcached、Ehcache等。

分布式缓存的优点是可以扩展性好、支持高并发、容量大,并且能够提高应用程序的可靠性和可用性

3)多级缓存(本地+分布式):

将缓存数据同时存储在本地缓存和分布式缓存中,以加快访问速度并提高可靠性。常见的多级缓存方案包括EHCache+Redis、Guava Cache+Redis等。多级缓存的优点是兼顾了本地缓存和分布式缓存的优点,使得缓存系统更灵活、性能更强。

1.2、相关问题

1)什么是本地缓存?它有哪些优点和缺点?

本地缓存是将缓存数据存储在单个应用程序进程内部的内存中,通常使用Java集合类实现。其优点是速度快、易于实现,不需要网络传输,但缺点是无法跨越多个应用程序进程共享数据。

2)什么是分布式缓存?它有哪些优点和缺点?

分布式缓存是将缓存数据存储在多台服务器上,通过网络传输数据实现缓存共享。常见的分布式缓存框架有Redis、Memcached、Ehcache等。其优点是可以扩展性好、支持高并发、容量大,并且能够提高应用程序的可靠性和可用性;缺点是维护成本高、配置复杂,存在一定的网络延迟和单点故障问题。

3)什么是多级缓存?它有哪些优点和缺点?

答多级缓存是将缓存数据同时存储在本地缓存和分布式缓存中,以加快访问速度并提高可靠性。常见的多级缓存方案包括EHCache+Redis、Guava Cache+Redis等。其优点是兼顾了本地缓存和分布式缓存的优点,使得缓存系统更灵活、性能更强;缺点是配置复杂,需要考虑缓存一致性和容量管理等问题。

4)如何选择适合自己应用的缓存方案?

在选择适合自己应用的缓存方案时,需要综合考虑应用场景、数据规模、并发性需求、可靠性要求、运营成本等因素,并进行详细的测试和评估。根据不同的需求和场景,可以选择本地缓存、分布式缓存或多级缓存等方案,也可以结合其他技术如CDN、静态资源服务器等实现更加灵活和高效的缓存应用。

2、淘汰策略

2.1、概述

Java缓存淘汰策略是指在缓存数据量达到一定阈值时,根据一定的规则删除部分缓存数据,以保持缓存容量和性能的平衡。常见的Java缓存淘汰策略包括:

1)Least Recently Used (LRU):最近最少使用策略,删除最近最少被使用的缓存项。

2)First In First Out (FIFO):先进先出策略,删除最早被加入到缓存中的缓存项。

3)Least Frequently Used (LFU):最不经常使用策略,删除使用频率最低的缓存项。

4)Random Replacement (RR):随机替换策略,根据一个随机算法选择要删除的缓存项。

5)Size-based Eviction:基于缓存大小进行淘汰,当缓存占用内存大小超过预设的容量时,按照某种策略淘汰一部分缓存项。

6)Time-to-Live (TTL):基于缓存项的生命周期进行淘汰,当缓存项的存活时间超过预设的时间阈值时,自动将其淘汰。

不同的缓存应用场景需要采用不同的淘汰策略,开发人员可以根据具体情况选择合适的策略。需要注意的是,在选择淘汰策略时,应该综合考虑缓存命中率、容量管理等问题,并进行适当的调整和优化。

2.2、相关问题

1)什么是缓存淘汰策略?

缓存淘汰策略是指在缓存数据量达到一定阈值时,根据一定的规则删除部分缓存数据,以保持缓存容量和性能的平衡。

2)常见的缓存淘汰策略有哪些?

常见的缓存淘汰策略包括:最近最少使用(LRU)、先进先出(FIFO)、最不经常使用(LFU)、随机替换(RR)、基于缓存大小的淘汰、基于缓存项的生命周期(TTL)等。

3)LRU和LFU算法的区别是什么?

LRU算法是最近最少使用策略,即删除最近最少被使用的缓存项;而LFU算法是最不经常使用策略,即删除使用频率最低的缓存项。

LRU更注重时间上的因素,强调缓存项的访问次数;LFU更注重频率上的因素,强调缓存项的使用频率。

4)如何选择合适的缓存淘汰策略?

在选择缓存淘汰策略时,需要根据具体应用场景和需求进行选择。如果关注缓存访问频率,则可选择LRU或LFU等基于使用次数和使用频率的策略;如果关注缓存大小,则可选择基于缓存大小的淘汰策略;如果关注缓存项的生命周期,则可选择基于缓存项的TTL策略。需要注意的是,不同的淘汰策略会对缓存性能、一致性和容量管理产生影响,因此选择策略时应综合考虑多个因素。

5)如何实现自定义的缓存淘汰策略?

实现自定义的缓存淘汰策略通常可以通过继承或实现Java缓存库提供的相应接口或抽象类,并覆盖其中的相关方法实现自己的逻辑。例如,Guava Cache提供了CacheBuilder.custom()方法允许用户自定义缓存规则和回收器,Ehcache提供了自定义Eviction算法的方式等。在实现自定义策略时,需要考虑到线程安全、性能和可靠性等问题。

资料来源:提升系统性能的必备利器:详解缓存分类、常见的缓存淘汰策略及实现方案 - 知乎 (zhihu.com)

相关推荐
富唯智能3 小时前
复合机器人 vs 工业人形机器人|工厂工序选型回本方案
经验分享
-XWB-5 小时前
【LLM】Agent Planning 完全指南:8 种纯 LLM 范式 + 8 种混合规划模式详解(二)
人工智能·经验分享·aigc·学习方法·ai编程
努力的小雨8 小时前
实测 Doubao-Seed-Evolving:把 Windows 桌面图标做成一个会自己运转的小世界
经验分享·ai智能
时空无限11 小时前
vllm 缓存对模型启动时间的影响
缓存·vllm
FrameNotWork12 小时前
组件冻结与按需加载:HarmonyOS 6.0 性能优化的核心手段
华为·性能优化·harmonyos
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题 第188题】【08_Kafka篇】第4题:Kafka 大量消息积压时该如何处理?
java·性能优化·kafka·故障排查·消息积压
法雅特吉他15 小时前
吉他弦寿命模型与更换判定
经验分享·新媒体运营·学习方法·材质·内容运营
青山木16 小时前
Redis 缓存一致性全解:从 Cache Aside 到延迟双删、Canal+MQ 的进阶之路
java·数据库·redis·后端·缓存
不是光头 强16 小时前
接口性能优化报告
网络协议·性能优化·rpc
qq_4017004116 小时前
Qt容器性能优化:QVector、QHash、QMap到底应该怎么选?
开发语言·qt·性能优化