Repolode
allegro

allegro/bigcache

面向 Go 的高性能并发内存缓存,可存储海量条目且降低 GC 开销。

Star
8,172
Fork
620
未关闭 Issue
101
最近提交
13天前

这是什么?

BigCache 是一个用于 Go 的内存缓存库,目标是在保存大量条目时不让垃圾回收器拖慢程序。条目以字节切片的形式保存在堆上,GC 不需要逐个扫描,因此大多数场景需要先把值序列化为字节再存入。

缓存采用分片设计以支持并发访问,条目在 LifeWindow 之后过期,CleanWindow 用于控制清理过期条目的频率。内存可以根据预期负载预先分配,也可以按需增长,并可通过 HardMaxCacheSize(单位 MB)设置上限。删除、过期或空间不足导致条目被移除时,可触发回调。

项目要求 Go 1.12 及以上版本,并附带一个基于该缓存构建的 HTTP 服务包。它不处理哈希冲突:哈希相同的新条目会覆盖已有条目。

核心功能

  • 01将条目以字节切片形式存放在堆上,降低 GC 停顿时间。
  • 02采用分片设计,支持并发读写。
  • 03通过 LifeWindow 和 CleanWindow 实现基于时间的过期淘汰。
  • 04可通过 HardMaxCacheSize 设置内存硬上限。
  • 05条目因过期、溢出或删除时可触发回调。
  • 06附带基于该缓存构建的 HTTP 服务包。

适用场景

  • 在长期运行的 Go 服务中缓存数 GB 的序列化数据。
  • 减轻持有数百万缓存条目的服务的 GC 开销。
  • 提供带时间过期机制的本地进程内缓存。

快速上手

  1. 1

    将 BigCache v3 模块添加到你的 Go 项目中

  2. 2

    使用默认配置(10 分钟存活时间)创建缓存

  3. 3

    以字节切片的形式设置和获取缓存条目

使用前须知

  • 缓存条目必须序列化为字节切片,因此大多数场景需要额外的序列化和反序列化代码。
  • BigCache 不处理哈希冲突;发生冲突时,新条目会覆盖已有的值。

标签

常见问题

bigcache 是什么?
面向 Go 的高性能并发内存缓存,可存储海量条目且降低 GC 开销。 BigCache 是一个用于 Go 的内存缓存库,目标是在保存大量条目时不让垃圾回收器拖慢程序。条目以字节切片的形式保存在堆上,GC 不需要逐个扫描,因此大多数场景需要先把值序列化为字节再存入。
bigcache 可以免费使用吗?用的什么许可证?
bigcache 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
bigcache 还在维护吗?
活跃维护中。bigcache 最近一次提交是在 2026年10月12日。
bigcache 适合用来做什么?
在长期运行的 Go 服务中缓存数 GB 的序列化数据。 减轻持有数百万缓存条目的服务的 GC 开销。 提供带时间过期机制的本地进程内缓存。
bigcache 怎么安装和运行?
将 BigCache v3 模块添加到你的 Go 项目中 使用默认配置(10 分钟存活时间)创建缓存 以字节切片的形式设置和获取缓存条目
在哪里获取 bigcache?
源代码和安装说明在 GitHub 上:https://github.com/allegro/bigcache

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目