package main
import "github.com/ykalchevskiy/ccache"
func main() {
cache := ccache.New[string]()
var v string
v, _ = cache.Do("k1", func() (string, error) { return "v1", nil })
println(v) // v1
v, _ = cache.Do("k1", func() (string, error) { return "v111111", nil }) // v will not change
println(v) // v1
}
package main
import (
"sync"
"sync/atomic"
"github.com/ykalchevskiy/ccache"
)
func main() {
cache := ccache.New[string]()
wg := &sync.WaitGroup{}
executionsCount := &atomic.Int32{}
for i := 0; i < 100; i++ {
wg.Add(1)
go func() {
defer wg.Done()
result, err := cache.Do("k2", func() (string, error) {
executionsCount.Add(1)
return "v2", nil
})
println(result) // v2
}()
}
wg.Wait()
println(executionsCount.Load()) // 1
}
package main
import "github.com/ykalchevskiy/ccache"
func main() {
cache := ccache.MustLRU(2, ccache.OnEvictionFunc[string](func(key string) { println(key + " evicted") }))
_, _ = cache.Do("k1", func() (string, error) { return "v1", nil }) //
_, _ = cache.Do("k2", func() (string, error) { return "v2", nil }) //
_, _ = cache.Do("k3", func() (string, error) { return "v3", nil }) // k1 evicted
_, _ = cache.Do("k2", func() (string, error) { return "v2", nil }) //
_, _ = cache.Do("k4", func() (string, error) { return "v4", nil }) // k3 evicted
}