perf: use "Keyspace" to determine database count if "CONFIG GET database" execute fail

This commit is contained in:
tiny-craft 2023-10-09 11:09:00 +08:00
parent 97f6ded7e0
commit ca663d8a55
1 changed files with 16 additions and 2 deletions

View File

@ -327,7 +327,7 @@ func (c *connectionService) OpenConnection(name string) (resp types.JSResp) {
// get connection config // get connection config
selConn := c.conns.GetConnection(name) selConn := c.conns.GetConnection(name)
totaldb := 16 var totaldb int
if selConn.DBFilterType == "" || selConn.DBFilterType == "none" { if selConn.DBFilterType == "" || selConn.DBFilterType == "none" {
// get total databases // get total databases
if config, err := rdb.ConfigGet(ctx, "databases").Result(); err == nil { if config, err := rdb.ConfigGet(ctx, "databases").Result(); err == nil {
@ -343,9 +343,23 @@ func (c *connectionService) OpenConnection(name string) (resp types.JSResp) {
resp.Msg = "get server info fail:" + err.Error() resp.Msg = "get server info fail:" + err.Error()
return return
} }
// Parse all db, response content like below // parse all db, response content like below
var dbs []types.ConnectionDB var dbs []types.ConnectionDB
info := c.parseInfo(res) info := c.parseInfo(res)
if totaldb <= 0 {
// cannot retrieve the database count by "CONFIG GET databases", try to get max index from keyspace
keyspace := info["Keyspace"]
var db, maxDB int
for dbName := range keyspace {
if db, err = strconv.Atoi(strings.TrimLeft(dbName, "db")); err == nil {
if maxDB < db {
maxDB = db
}
}
}
totaldb = maxDB + 1
}
queryDB := func(idx int) types.ConnectionDB { queryDB := func(idx int) types.ConnectionDB {
dbName := "db" + strconv.Itoa(idx) dbName := "db" + strconv.Itoa(idx)
dbInfoStr := info["Keyspace"][dbName] dbInfoStr := info["Keyspace"][dbName]