package redis import ( "context" "net/url" "strconv" "strings" "git.apinb.com/bsm-sdk/engine/vars" cacheRedis "github.com/redis/go-redis/v9" ) const ( Nil = cacheRedis.Nil ) // RedisClient . type RedisClient struct { DB int Client *cacheRedis.Client Ctx context.Context } func New(dsn string, hashRadix int) *RedisClient { arg, err := url.Parse(dsn) if err != nil { panic(err) } pwd, _ := arg.User.Password() //get db number,default:0 var db int = 0 arg.Path = strings.ReplaceAll(arg.Path, "/", "") if arg.Path == "" { db = Hash(hashRadix) } else { db, _ = strconv.Atoi(arg.Path) } //connect redis server client := cacheRedis.NewClient(&cacheRedis.Options{ Addr: arg.Host, Password: pwd, // no password set DB: db, // use default DB Protocol: 3, }) _, err = client.Ping(context.Background()).Result() if err != nil { panic(err) } return &RedisClient{ DB: db, Client: client, Ctx: context.Background(), } } func Hash(i int) int { return i % vars.RedisShardings }