func (this *MyMethod) Setkeyskv(key string, arr ...string) (interface{}, error) { method := "SetkeysKV" res, err := models.RedisRun("keys", key) if err != nil { return "Setkeyskv error", err } if resArr, ok := res.([]interface{}); ok { fmt.Println("len of keys is ", len(resArr)) for i, val := range resArr { if str, ok := val.([]byte); ok { unitkey := string(str) res, err := models.RedisRun("hmset", unitkey, arr) if err != nil { return method + "errors", err } fmt.Printf(method+"id %-5d key %-60s. res is %-30s\n", i, string(str), res) } } } else { return method + " failed", nil } return method + "success", nil }
func (this *MyMethod) Delkeys(key string, _ ...string) (interface{}, error) { // method := "delkeys" res, err := models.RedisRun("keys", key) if err != nil { return "delkeys error", err } if resArr, ok := res.([]interface{}); ok { fmt.Println("len of keys is ", len(resArr)) for i, val := range resArr { if str, ok := val.([]byte); ok { delkey := string(str) res, err := models.RedisRun("del", delkey) if err != nil { return "delkeys errors", err } fmt.Printf("delete id %-5d key %-60s. res is %-30d\n", i, string(str), res) } } } else { fmt.Println("result: ", res) } return "delkeys success", nil }
func (this *MyMethod) Getjson(key string, args ...string) (interface{}, error) { method := "SetkeysKV" if len(args) > 0 { return method + " error", fmt.Errorf("this command has none args.") } res, err := models.RedisRun("get", key) if err != nil { return "GetJson error", err } if resArr, ok := res.([]byte); ok { return string(resArr), nil } else { return method + " failed", nil } }
func main() { fmt.Println("input redis command or self command,input help see detail.") for { fmt.Printf(">> ") cmd := ReadLine() switch strings.TrimSpace(cmd) { case "": continue case "help": showSelfCmd() continue case "exit": case "quit": return } arr := strings.Split(cmd, " ") for i, _ := range arr { arr[i] = strings.TrimSpace(arr[i]) } var res interface{} var err error length := len(arr) m := MyMethod{} /* if length <= 0 { continue } else if length == 1 { res, err = models.RedisOnlyCmd(arr[0]) } else if length == 2 { res, err = models.RedisRun(arr[0], arr[1]) } else { switch arr[0] { case "delkeys": fmt.Println("delete keys") default: res, err = models.RedisRunArgs(arr[0], arr[1], arr[2:]) } }*/ if length <= 0 { continue } else if m.IsFunc(arr[0]) { f, ok := m.GetFunc(arr[0]) if !ok { fmt.Println("Error! Can't find the function.") } if length == 1 { fmt.Println("have not have one args function.") } else { //即使arr的长度只有2,那么这里是不会报错的。而且正常调用 res, err = f(arr[1], arr[2:]...) } } else { if length == 1 { res, err = models.RedisOnlyCmd(arr[0]) } else if length == 2 { res, err = models.RedisRun(arr[0], arr[1]) } else if length == 3 { res, err = models.RedisRun(arr[0], arr[1], arr[2]) } else { res, err = models.RedisRun(arr[0], arr[1], arr[2:]) } } if err != nil { fmt.Println("request error", err) } if resArr, ok := res.([]interface{}); ok { fmt.Println("len of res is ", len(resArr)) for j, val := range resArr { if str, ok := val.([]byte); ok { fmt.Println("res interface to string is :", j, string(str)) } if strArr, ok := val.([]interface{}); ok { for i, v := range strArr { fmt.Println("res to array ", j, i, string(v.([]byte))) } } } } else { if strByte, ok := res.([]byte); ok { fmt.Println("res byte to string is :", string(strByte)) } else { fmt.Println("res:") fmt.Println(res) } } } }