Partial implementations of Guava Cache in Go.
Supported cache replacement policies:
- LRU
- Segmented LRU (default)
- TinyLFU (experimental)
The TinyLFU implementation is inspired by Caffeine by Ben Manes and go-tinylfu by Damian Gryski.
go get -u github.com/goburrow/cache
package main
import (
"fmt""math/rand""time""github.com/goburrow/cache"
)
funcmain() {
load:=func(k cache.Key) (cache.Value, error) {
time.Sleep(100*time.Millisecond) // Slow taskreturnfmt.Sprintf("%d", k), nil
}
// Create a loading cachec:=cache.NewLoadingCache(load,
cache.WithMaximumSize(100), // Limit number of entries in the cache.cache.WithExpireAfterAccess(1*time.Minute), // Expire entries after 1 minute since last accessed.cache.WithRefreshAfterWrite(2*time.Minute), // Expire entries after 2 minutes since last created.
)
getTicker:=time.Tick(100*time.Millisecond)
reportTicker:=time.Tick(5*time.Second)
for {
select {
case<-getTicker:
_, _=c.Get(rand.Intn(200))
case<-reportTicker:
st:= cache.Stats{}
c.Stats(&st)
fmt.Printf("%+v\n", st)
}
}
}