[](https://github.com/bep/lazycache/actions?query=workflow:Test)
[](https://goreportcard.com/report/github.com/bep/lazycache)
[](https://codecov.io/github/bep/lazycache)
[](https://godoc.org/github.com/bep/lazycache)
**Lazycache** is a simple thread safe in-memory LRU cache. Under the hood it leverages the great [simpleru package in golang-lru](https://github.com/hashicorp/golang-lru), with its exellent performance. One big difference between `golang-lru` and this library is the [GetOrCreate](https://pkg.go.dev/github.com/bep/lazycache#Cache.GetOrCreate) method, which provides:
* Non-blocking cache priming on cache misses.
* A guarantee that the prime function is only called once for a given key.
* The cache's [RWMutex](https://pkg.go.dev/sync#RWMutex) is not locked during the execution of the prime function, which should make it easier to reason about potential deadlocks.
Other notable features:
* The API is [generic](https://go.dev/doc/tutorial/generics)
* The cache can be [resized](https://pkg.go.dev/github.com/bep/lazycache#Cache.Resize) while running.
* When the number of entries overflows the defined cache size, the least recently used item gets discarded (LRU).