Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hashicorp/golang-lru
Golang LRU cache
https://github.com/hashicorp/golang-lru
Last synced: about 2 months ago
JSON representation
Golang LRU cache
- Host: GitHub
- URL: https://github.com/hashicorp/golang-lru
- Owner: hashicorp
- License: mpl-2.0
- Created: 2014-08-06T22:14:53.000Z (about 10 years ago)
- Default Branch: main
- Last Pushed: 2024-05-28T14:47:19.000Z (4 months ago)
- Last Synced: 2024-06-20T19:23:36.626Z (3 months ago)
- Language: Go
- Size: 125 KB
- Stars: 4,156
- Watchers: 329
- Forks: 488
- Open Issues: 39
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesomeLibrary - golang-lru - Golang LRU cache. (语言资源库 / go)
- awesome - hashicorp/golang-lru - Golang LRU cache (Go)
- awesome-repositories - hashicorp/golang-lru - Golang LRU cache (Go)
- awesome-go - golang-lru - provides the lru package which implements a fixed-size thread safe LRU cache. (Hashicorp) (Data structures)
- go-awesome - golang-lru - implementation of the LRU algorithm (Open source library / Algorithm)
README
golang-lru
==========This provides the `lru` package which implements a fixed-size
thread safe LRU cache. It is based on the cache in Groupcache.Documentation
=============Full docs are available on [Go Packages](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2)
LRU cache example
=================```go
package mainimport (
"fmt"
"github.com/hashicorp/golang-lru/v2"
)func main() {
l, _ := lru.New[int, any](128)
for i := 0; i < 256; i++ {
l.Add(i, nil)
}
if l.Len() != 128 {
panic(fmt.Sprintf("bad len: %v", l.Len()))
}
}
```Expirable LRU cache example
===========================```go
package mainimport (
"fmt"
"time""github.com/hashicorp/golang-lru/v2/expirable"
)func main() {
// make cache with 10ms TTL and 5 max keys
cache := expirable.NewLRU[string, string](5, nil, time.Millisecond*10)// set value under key1.
cache.Add("key1", "val1")// get value under key1
r, ok := cache.Get("key1")// check for OK value
if ok {
fmt.Printf("value before expiration is found: %v, value: %q\n", ok, r)
}// wait for cache to expire
time.Sleep(time.Millisecond * 12)// get value under key1 after key expiration
r, ok = cache.Get("key1")
fmt.Printf("value after expiration is found: %v, value: %q\n", ok, r)// set value under key2, would evict old entry because it is already expired.
cache.Add("key2", "val2")fmt.Printf("Cache len: %d\n", cache.Len())
// Output:
// value before expiration is found: true, value: "val1"
// value after expiration is found: false, value: ""
// Cache len: 1
}
```