in internal/lru/lru.go [67:95]
func (c *Cache) FindOrFetch(cacheNamespace, key string, fetchFn func() (any, error)) (any, error) {
item := c.cache.Get(cacheNamespace + key)
if item != nil && !item.Expired() {
if c.metricCacheRequests != nil {
c.metricCacheRequests.WithLabelValues(c.op, "hit").Inc()
}
return item.Value(), nil
}
value, err := fetchFn()
if err != nil {
if c.metricCacheRequests != nil {
c.metricCacheRequests.WithLabelValues(c.op, "error").Inc()
}
return nil, err
}
if c.metricCacheRequests != nil {
c.metricCacheRequests.WithLabelValues(c.op, "miss").Inc()
}
if c.metricCachedEntries != nil {
c.metricCachedEntries.WithLabelValues(c.op).Inc()
}
c.cache.Set(cacheNamespace+key, value, c.duration)
return value, nil
}