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


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

    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)

  • 相关阅读:
    InitializingBean afterPropertiesSet
    微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库
    Blazor前后端框架Known-V1.2.2
    【Linux基础命令】nmtui命令使用实战
    Redis-主从复制是怎么实现的
    SpringSecurity(三)- SpringSecurity 原理
    使用 JPA、Hibernate 和 Spring Data JPA 进行审计
    资本-劳动力错配指数计算、金融错配指标两大维度指标(内附代码)
    在js中使用proxy的棘手问题
    Wireshark技巧[监听串口包]
  • 原文地址:https://blog.csdn.net/weixin_45483322/article/details/133299201