package cache import ( "context" "fmt" "time" "github.com/go-redis/redis/v8" ) var C *redis.Client func Init(addr string) { C = redis.NewClient(&redis.Options{ Addr: addr, DB: 12, }) ctx := context.Background() if err := C.Do(ctx, "PING").Err(); err != nil { fmt.Println(addr) errStr := fmt.Sprintf("Redis 无法访问: %s", err.Error()) panic(errStr) } } 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 }