package cache import ( "context" "fmt" "gitea.loveuer.com/yizhisec/packages/tool" "github.com/go-redis/redis/v8" _ "github.com/go-redis/redis/v8" "net/url" ) var ( defaultRedis = "redis://127.0.0.1:6379" ) func New(opts ...OptionFn) (Cache, error) { var ( err error cfg = &config{ ctx: context.Background(), redis: &defaultRedis, } ) for _, opt := range opts { opt(cfg) } if cfg.redis != nil { var ( ins *url.URL client *redis.Client ) if ins, err = url.Parse(*cfg.redis); err != nil { return nil, err } username := ins.User.Username() password, _ := ins.User.Password() client = redis.NewClient(&redis.Options{ Addr: ins.Host, Username: username, Password: password, }) if err = client.Ping(tool.CtxTimeout(cfg.ctx, 5)).Err(); err != nil { return nil, err } return newRedis(cfg.ctx, client), nil } return nil, fmt.Errorf("invalid cache config") } func Init(opts ...OptionFn) (err error) { Default, err = New(opts...) return err }