Golang如何连接redis哨兵模式,项目案例,模块化客户端
// field : count,token_count
// ctx := context.Background()
// 登录次数计数器
func getLoginErrorCount(ctx context.Context, uname ,field string) (int, error) {
count := 0 // 默认是没有登录错误次数
conn, err := redSentinelConn.GetConn()
if err != nil {
return count, err
}
bExist, err := conn.HExists(ctx, uname, field).Result()
if err != nil {
return count, err
}
if bExist == false {
return count, nil
} else {
valmap ,err := conn.HGetAll(ctx, uname).Result()
if err != nil {
log.Printf("###### HGetAll err", err)
return count, nil
}
log.Printf("###### HGetAll valmap", valmap)
val, err := conn.HGet(ctx, uname, field).Int()
if err != nil {
log.Printf("###### HMGet hmget err", err)
return count, nil
}
log.Printf("###### HMGet hmget Val", val)
return val, nil
}
}
func loginErrorCount(ctx context.Context, uname ,field string) (int, error) {
conn, err := redSentinelConn.GetConn()
if err != nil {
return 0, err
}
count, err := getLoginErrorCount(ctx, uname,field)
log.Printf("###### getDoLoginErrorCount count", count)
if err != nil {
log.Printf("doLoginErrorCount err", err)
return count, nil
}
count++
if count <= 5 {
err := conn.HSet(ctx, uname, field, count).Err()
if err != nil {
log.Printf("redis set error:", err)
}
}
conn.Expire(ctx, uname, 10*time.Minute)
return count, nil
}