本地缓存Caffeine的缓存过期淘汰策略

本地缓存是一种将数据存储在应用程序的内存中,以加速数据访问的技术。缓存的数据可以是频繁访问的数据,以减少对慢速数据源(如数据库或网络)的访问。缓存通常有一些缓存过期淘汰策略,以确保缓存中的数据保持最新和有效。Caffeine是一个常用的本地缓存库,支持多种缓存过期淘汰策略。

以下是Caffeine缓存的常见缓存过期淘汰策略:

  1. 基于时间的过期策略 :这种策略基于数据存储在缓存中的时间来决定何时过期。在Caffeine中,你可以使用expireAfterWrite方法设置数据的写入后过期时间,或使用expireAfterAccess方法设置数据的最后访问后过期时间。例如:

    java 复制代码
    Cache<String, Object> cache = Caffeine.newBuilder()
        .expireAfterWrite(30, TimeUnit.MINUTES) // 写入后30分钟过期
        .build();
  2. 基于大小的过期策略 :这种策略基于缓存的大小来决定何时淘汰数据。你可以使用maximumSize方法来限制缓存的最大大小,当缓存超过指定大小时,会自动淘汰一些数据。

    java 复制代码
    Cache<String, Object> cache = Caffeine.newBuilder()
        .maximumSize(1000) // 缓存最多1000个条目
        .build();
  3. 基于引用的过期策略:这种策略允许你定义数据的引用类型,当数据不再被引用时自动过期。Caffeine支持的引用类型包括强引用、软引用、弱引用和虚引用。

    java 复制代码
    Cache<String, Object> cache = Caffeine.newBuilder()
        .softValues() // 使用软引用
        .build();
  4. 手动过期策略 :除了自动过期策略外,你还可以使用invalidate方法手动将数据从缓存中移除。

    java 复制代码
    cache.invalidate("key"); // 手动移除指定键的数据
  5. 定时刷新策略 :你可以使用refreshAfterWrite方法定时刷新缓存中的数据,确保缓存中的数据始终是最新的。

    java 复制代码
    Cache<String, Object> cache = Caffeine.newBuilder()
        .refreshAfterWrite(1, TimeUnit.HOURS) // 每隔1小时自动刷新数据
        .build();

选择合适的缓存过期淘汰策略取决于你的应用程序需求和性能特点。不同的策略可以适用于不同的场景,例如缓存数据的访问模式、数据的生命周期、内存限制等。根据具体情况,可以使用上述策略的组合来实现更复杂的缓存管理。

相关推荐
一拳一个娘娘腔2 小时前
CVE-2026-43284 — Dirty Frag 深度拆解:当零拷贝遇上原地解密,页缓存成了攻击者的画板
linux·缓存
lx188548698962 小时前
Redis大Key阻塞:单线程CPU100%的致命陷阱
数据库·redis·缓存
IT策士2 小时前
Redis 从入门到精通:位图、HyperLogLog、GEO
数据库·redis·缓存
布局呆星2 小时前
Spring Boot + Redis 缓存实战:@Cacheable、序列化踩坑、缓存一致性,一次讲透
spring boot·redis·缓存
努力成为AK大王3 小时前
计算机底层核心原理:CPU、总线、缓存与内存深度解析
缓存·内存·cpu
闪电悠米3 小时前
黑马点评-Redis 消息队列-04_stream_seckill_order
数据库·redis·分布式·缓存·oracle·junit·lua
通信侠4 小时前
android相机热启动缓存帧解决方案(任务快照)
android·缓存·blur·tasksnapshot·mtkcam
Albert Edison19 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
Steadfast_GG20 小时前
Redis中的通用命令
redis·缓存
颜笑晏晏1 天前
长输入短输出场景下的 SGLang 推理性能实测前缀缓存、PD 分离配比与参数调优
缓存·推理优化·sglang·ai infra·pd分离