feat: 添加 database - cache(redis)
This commit is contained in:
61
database/cache/new.go
vendored
Normal file
61
database/cache/new.go
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user