package cache import ( "context" "time" "github.com/go-redis/redis/v8" ) var C *redis.Client func Init(addr string) { C = redis.NewClient(&redis.Options{ Addr: addr, DB: 12, }) } func GetOrSet(ctx context.Context, key string, ttl time.Duration, fetch func() (interface{}, error)) (interface{}, error) { val, err := C.Get(ctx, key).Result() if err == nil { return val, nil } result, err := fetch() if err != nil { return nil, err } C.Set(ctx, key, result, ttl) return result, nil }