当前位置: 首页 > news >正文

easy-caffeine一个简洁灵活易用基于caffeine的本地缓存框架

Easy-Caffeine

easy-caffeine一个简洁灵活易用基于caffeine的本地缓存框架。

A lightweight, pluggable local cache component powered by Caffeine, supporting per-entry TTL and memory-aware eviction.


开源项目地址:
https://gitee.com/luliang111222/easy-caffeine

Why

为什么会有这个项目

  • 原生 Caffeine 的局限
    • 仅支持 统一 TTLexpireAfterWrite / expireAfterAccess),无法为不同条目指定独立过期时间;
    • 默认按 条目数量 或自定义 weight 进行淘汰,但 weight 多以固定常数衡量,缺乏基于「对象真实字节数」的 精细化内存控制
    • 参数需在 Caffeine.newBuilder() 链式设置,项目内 无法集中式全局配置,导致每处使用都要 new 实例并重复配置逻辑,无法管理全局内存占用。
  • 业务需要低依赖、易接入 – 线上很多场景(配置缓存、热点数据)只需一个简单可靠的本地缓存,而不是沉重的 Redis/Memcached 集群。
  • 想要学习 & 复用 Caffeine 的最佳实践 – 给团队一个可参考、可拓展的缓存封装模板。

What

项目提供了什么功能

功能说明
统一 APILocalCacheApi 屏蔽实际实现,调用方无感知切换 Caffeine/Redis/自研方案
内存权重淘汰使用 Jackson 优化计算内存占用,高性能安全可靠 + 自定义 Weigher 精准估算条目大小,按「总内存」而非「条目数」限制缓存
单条 TTL自定义 EntryExpiry,每条记录可指定独立过期时间
Builder + 线程池CustomCacheBuilder 支持设置最大内存/权重因子/异步执行器
可配置化LocalCacheStoreConfig.json 描述实现类、内存阈值、权重因子,生产可热更新
可扩展新增缓存实现只需实现 LocalCacheApi 并在配置中声明即可

How

如何使用 & 如何实现

1. 快速上手

<!-- pom.xml 引入 -->
<dependency><groupId>net.lightdata.cache</groupId><artifactId>easy-caffeine</artifactId><version>1.0.1</version>
</dependency>
// 读取默认配置并获取单例
LocalCacheStore cache = LocalCacheStore.getStore();// 写入:过期 120 秒
cache.put("user:1", userObj, 120);// 读取
User user = cache.get("user:1");// 删除(并返回旧值)
User old = cache.remove("user:1");

2. 运行示例

start
23:41:59.032 [main] INFO net.lightdata.cache.api.impl.CaffeineLocalCache - 构造CaffeineLocalCache:LocalCacheConfig{maxMemorySize=524288000, weightMemoryFactor=3.0, className='net.lightdata.cache.api.impl.CaffeineLocalCache'}
0已被淘汰返回: 
null
{"id":4999998,"name":"学生4999998","teacher":{"id":4999998,"teacherName":"老师姓名4999998","subject":"科目4999998"}}
{"id":4999999,"name":"学生4999999","teacher":{"id":4999999,"teacherName":"老师姓名4999999","subject":"科目4999999"}}
4999999已删除: 
null

3. 配置说明 (src/main/resources/LocalCacheStoreConfig.json)

{"maxMemorySize": 524288000,            // 最大权重 ≈ 500 MB"weightMemoryFactor": 3.0,            // 序列化大小内存放大系数"className": "net.lightdata.cache.api.impl.CaffeineLocalCache" // 缓存实现类,可替换
}

4. 设计概览

delegate
LocalCacheStore
LocalCacheApi
Impl
CaffeineLocalCache
CustomCache
EntryExpiry
EntryWeight
  • LocalCacheStore – 延迟加载配置并持有单例;
  • LocalCacheApi – 缓存操作抽象;
  • CaffeineLocalCache – 将配置转为 CustomCache
  • CustomCache – 封装 Caffeine,支持单条 TTL & 权重;
  • EntryExpiry / EntryWeight – 过期与权重策略自定义实现。

5. 扩展指南

  1. 新建类实现 LocalCacheApi,如 RedisLocalCache
  2. 构造函数接收 LocalCacheConfig 并初始化内部客户端
  3. LocalCacheStoreConfig.json 修改 className 为新实现的全限定名
  4. 热部署或重启即可切换实现

6. Roadmap

  • 导出指标到 Micrometer / Prometheus
  • 支持 putIfAbsentgetAll 批量接口
  • 提供 Spring Boot Starter

开源项目地址:
https://gitee.com/luliang111222/easy-caffeine

http://www.lqws.cn/news/514927.html

相关文章:

  • dovi交叉编译方法(编译libdovi.so)
  • PyTorch 入门之官方文档学习笔记(二)训练分类器
  • 利用Pytorch玩一玩文生图的HDGAN
  • 长尾关键词SEO优化高效策略
  • 微信小程序安卓手机输入框文字飘出输入框
  • 【服务器】服务器选型设计
  • Hadoop之HDFS
  • 【iOS】iOS崩溃总结
  • 一篇文章了解XML
  • 了解笔记本电脑制造:从品牌到代工厂的全产业链
  • Node.js-fs模块
  • linux内核中的链表实现
  • sentinel与seata组件在微服务中的基本作用
  • 微信点餐小程序—美食物
  • ICML 2025 | 低秩Swish网络:理论突破实现高效逼近,小模型性能媲美大网络
  • CSP - J 400分题单总结(洛谷题号)
  • 通过 HTML 子图和多尺度卷积 BERT 的双向融合实现可解释的恶意 URL 检测
  • xtrabackup 的工作原理 为什么不用停服?
  • Jenkins Pipeline 与 Python 脚本之间使用环境变量通信
  • IDEA高效开发指南:JRebel热部署
  • 设计模式精讲 Day 13:责任链模式(Chain of Responsibility Pattern)
  • 激光束修复手机屏任意层不良区域,实现液晶线路激光修复原理
  • 鸿蒙与h5的交互
  • AR美型SDK,重塑面部美学,开启智能美颜新纪元
  • 微信小程序适配 iPhone 底部导航区域(safe area)的完整指南
  • 【JAVA】idea中打成jar包后报错错误: 找不到或无法加载主类
  • 大学专业科普 | 物联网、自动化和人工智能
  • IO多路复用——Poll底层原理深度分析
  • 深入解析RS485通信:从原理到Linux驱动开发实践
  • DeepSeek在数据分析与科学计算中的革命性应用