Repolode
dgraph-io

dgraph-io/ristretto

一个面向 Go 的高性能、并发安全的内存缓存库,支持按成本淘汰。

Star
7,005
Fork
456
未关闭 Issue
21
最近提交
上个月

这是什么?

Ristretto 是一个用 Go 编写的内存缓存库,专为多个 goroutine 同时读写缓存、锁竞争容易成为瓶颈的场景设计。它最初是为 Dgraph 内部实现无竞争缓存而开发的。

淘汰策略采用 SampledLFU,准入策略采用 TinyLFU,目标是在占用很少内存(每个频率计数器约 12 bit)的同时保持较高的命中率。每个条目都可以指定自定义成本,因此一个价值较高的大条目可以淘汰多个小条目。缓存容量按总成本而非条目数量进行限制。

接口简洁:配置 NumCounters、MaxCost 和 BufferItems 后,即可使用 Set、Get 和 Del 操作缓存。可选的指标功能可统计吞吐量和命中率等数据。Ristretto 是单进程库,不提供分布式能力。需要 Go 1.21 或更高版本,v2 版本基于泛型实现。

核心功能

  • 01基于成本的淘汰机制,大而有价值的条目可以替换多个小条目。
  • 02结合 SampledLFU 淘汰与 TinyLFU 准入策略,保持较高命中率。
  • 03支持大量 goroutine 并发访问,吞吐量下降较少。
  • 04可选的吞吐量和命中率指标统计。
  • 05v2 版本提供泛型 API。

适用场景

  • 在 Go 服务中缓存计算结果或数据库查询结果,减少重复开销。
  • 按总成本而非条目数量限制缓存的内存占用。
  • 为嵌入式数据库或存储引擎提供进程内缓存。

快速上手

  1. 1

    安装 Go 1.21 或更高版本

  2. 2

    在项目中使用 go get 安装 Ristretto

    go get github.com/dgraph-io/ristretto/v2

使用前须知

  • v1 接口较旧;v2 使用泛型且接口略有不同,现有代码可能需要修改。
  • 新条目的 Set 调用不保证一定会被存入缓存,因为在竞争或准入策略下可能被丢弃。

标签

常见问题

ristretto 是什么?
一个面向 Go 的高性能、并发安全的内存缓存库,支持按成本淘汰。 Ristretto 是一个用 Go 编写的内存缓存库,专为多个 goroutine 同时读写缓存、锁竞争容易成为瓶颈的场景设计。它最初是为 Dgraph 内部实现无竞争缓存而开发的。
ristretto 可以免费使用吗?用的什么许可证?
ristretto 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
ristretto 还在维护吗?
半年内有更新。ristretto 最近一次提交是在 2026年9月21日。
ristretto 适合用来做什么?
在 Go 服务中缓存计算结果或数据库查询结果,减少重复开销。 按总成本而非条目数量限制缓存的内存占用。 为嵌入式数据库或存储引擎提供进程内缓存。
ristretto 怎么安装和运行?
安装 Go 1.21 或更高版本 在项目中使用 go get 安装 Ristretto: go get github.com/dgraph-io/ristretto/v2
在哪里获取 ristretto?
源代码和安装说明在 GitHub 上:https://github.com/dgraph-io/ristretto

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

相关项目