golang-lru

HashiCorp's generic-typed, thread-safe LRU cache for Go, with ARC, 2Q, and TTL-expiring variants.

Library
Go
vv2.0.7
5,116stars
Mozilla Public License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
73/100Good
Development Activity64
Maintenance40
Community88
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
77/100Good
Architecture80
Code Quality82
Innovation62
Learning Curve85

golang-lru is HashiCorp’s fixed-size, thread-safe LRU (Least Recently Used) cache implementation for Go, built on generics for full type safety. It began as a wrapper around Groupcache’s cache logic and now ships four interchangeable cache variants in one module: a classic LRU, a 2Q cache that resists scan pollution, an ARC (Adaptive Replacement Cache) that balances recency and frequency automatically, and an expirable LRU with per-entry TTL.

The library is used throughout HashiCorp’s own tooling, including Vault, Consul, and Nomad, as well as many other Go projects that need bounded in-memory caching without standing up an external cache server. Each variant lives as a small, dependency-light package under a shared module, so teams pick exactly the eviction strategy their workload needs.

What You Get

  • A generic, thread-safe Cache[K, V] type implementing classic LRU eviction
  • An expirable subpackage adding per-cache TTL expiration on top of LRU semantics
  • A 2Q cache variant that resists pollution from one-time scan access patterns
  • An ARC (Adaptive Replacement Cache) variant that auto-balances recency vs frequency
  • Optional eviction callbacks fired outside the internal lock for safe cleanup/metrics hooks

Common Use Cases

  • In-process caching of expensive API or database responses to cut redundant calls
  • Bounding memory for connection or session pools inside infrastructure daemons
  • Building TTL-based rate limiters or short-lived counters with the expirable variant
  • Scan-resistant read-through caching where hot keys must survive occasional bulk scans

Under The Hood

Architecture The module is organized as a set of sibling packages sharing one generic doubly-linked-list implementation in internal/list.go (adapted from Go’s container/list, with an added expiry timestamp field). The root lru package wraps a non-thread-safe simplelru.LRU[K, V] behind a sync.RWMutex and an optional eviction-callback buffer that is drained outside the critical section (see Cache.Purge and Cache.onEvicted in lru.go) to avoid calling user code while holding the lock. The arc package composes four simplelru.LRUCache instances (T1/T2 for recent/frequent entries, B1/B2 as ghost eviction-history lists) to implement the ARC algorithm, while expirable reimplements the list with time-aware eviction and a background sweep goroutine. This layered composition means every variant reuses the same core list/map primitives rather than duplicating cache logic.

Tech Stack Pure Go with no third-party runtime dependencies; go.mod declares go 1.19 to use generics throughout (K comparable, V any). The arc subpackage is its own Go module with its own go.mod, isolating it for versioning. Build/test tooling is a plain Makefile plus go test; CI runs via GitHub Actions (.github/workflows/ci.yml) with Dependabot keeping the module and Actions versions current, and a HashiCorp copywrite check enforces license headers.

Code Quality Every package ships a matching _test.go file (lru_test.go, simplelru/lru_test.go, arc/arc_test.go, expirable/expirable_lru_test.go, 2q_test.go) exercising eviction order, capacity limits, callback firing, and expiry timing. Errors are returned explicitly (e.g. New returns an error for non-positive size) rather than panicking, and public types are documented with doc comments throughout. Locking is consistent: every thread-safe wrapper holds its own sync.RWMutex rather than sharing state across packages.

What Makes It Unique Rather than picking one eviction policy, the module exposes four algorithmically distinct caches behind a near-identical API, letting callers swap ARC for plain LRU or add TTL expiration without changing call sites. The ARC implementation in particular is a comparatively rare open-source instance of IBM’s patented Adaptive Replacement Cache algorithm made available under a permissive-enough license for general use, giving Go projects an alternative to manually tuning 2Q’s fixed parameters.

Used by 18 apps in this directory

Go
82%
AGPL 3.0

Beta9

Developer Tools · AI Development · Data Engineering

1,762

Run AI workloads at scale with a Pythonic serverless runtime that handles GPU inference, background jobs, and sandboxes with zero infrastructure overhead.

View details
84
Repo Health
78
Technical
67
Dependency
Built with
Go82%
Python17%
Updated 3 days ago
Go
52%
MIT

Bytebase

Devops

14,449

An open-source database CI/CD and DevSecOps platform — schema migration review, GitOps-driven changes, data masking, and access control across MySQL, PostgreSQL, Oracle, Snowflake, MongoDB, and more.

View details
91
Repo Health
73
Technical
69
Dependency
Built with
Go52%
TypeScript39%
Updated yesterday
Go
92%
AGPL 3.0

Cozy Stack

File Storage · Productivity

1,270

Self-hosted personal cloud platform that unifies your files, apps, and devices in one private space you fully control.

View details
94
Repo Health
77
Technical
67
Dependency
Built with
Go92%
Updated 2 days ago
Go
79%
Apache 2.0

Dolt

Databases · Data Engineering · Developer Tools

24,298

The SQL database you can branch, merge, diff, and clone — Git for your data, MySQL-compatible and ready for multi-agent AI workflows.

View details
90
Repo Health
9
Technical
67
Dependency
Built with
Go79%
Shell20%
Updated 2 days ago
Go
83%
MIT

Gitea

Devops · Developer Tools · Project Management

57,677

Self-hosted DevOps in a single Go binary — Git hosting, GitHub Actions-compatible CI/CD, and 30+ package registries without any SaaS dependency.

View details
93
Repo Health
79
Technical
66
Dependency
Built with
Go83%
Updated today
Ruby
67%
Other

GitLab

Devops · Developer Tools

24,546

The complete DevOps platform that unifies Git hosting, CI/CD, issue tracking, and security scanning into a single self-hostable application.

View details
87
Repo Health
86
Technical
69
Dependency
Built with
Ruby67%
JavaScript20%
Updated today
TypeScript
49%
AGPL 3.0

Grafana

Monitoring · Analytics

76,498

The open-source observability platform that unifies metrics, logs, and traces from any data source into dynamic, queryable dashboards.

View details
95
Repo Health
91
Technical
65
Dependency
Built with
TypeScript49%
Go45%
Updated today
Go
61%
Apache 2.0

Harness Open Source

Developer Tools · Devops · Code Editors

38,169

A unified open source DevOps platform combining Git hosting, CI/CD pipelines, cloud development environments, and artifact registries in a single self-hosted system.

View details
89
Repo Health
79
Technical
64
Dependency
Built with
Go61%
TypeScript34%
Updated 2 days ago
Go
84%
MIT

Hatchet

AI Development · Developer Tools · Automation

7,812

A Postgres-backed orchestration engine for background tasks, AI agents, and durable workflows that replaces Redis queues and multi-datastore durable execution platforms with a single self-hostable service.

View details
88
Repo Health
83
Technical
68
Dependency
Built with
Go84%
PLpgSQL11%
Updated today

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search