// go run goredis-server.go -h localhost -p 1602 // go run goredis-server.go -procs 8 -p 17600 // go run goredis-server.go -slaveof localhost:1603 func main() { version := flag.Bool("v", false, "print goredis-server version") host := flag.String("h", "", "server host") port := flag.Int("p", 1602, "server port") slaveof := flag.String("slaveof", "", "replication") procs := flag.Int("procs", 8, "GOMAXPROCS") repair := flag.Bool("repair", false, "repaire rocksdb") flag.Parse() if *version { fmt.Println("goredis-server", goredis_server.VERSION) return } runtime.GOMAXPROCS(*procs) opt := goredis_server.NewOptions() opt.SetBind(fmt.Sprintf("%s:%d", *host, *port)) opt.SetDirectory(dbHome(*port)) if len(*slaveof) > 0 { h, p, e := splitHostPort(*slaveof) if e != nil { panic(e) } opt.SetSlaveOf(h, p) } // 重定向日志输出位置 redirectLogOutput(opt.Directory()) // repair if *repair { dbhome := opt.Directory() + "db0" finfo, e1 := os.Stat(dbhome) if os.IsNotExist(e1) || !finfo.IsDir() { stdlog.Println("db not exist") return } else { stdlog.Println("start repair", dbhome) levelredis.Repair(dbhome) stdlog.Println("repair finish") } return } stdlog.Println("========================================") server := goredis_server.NewGoRedisServer(opt) if err := server.Init(); err != nil { panic(err) } if err := server.Listen(); err != nil { panic(err) } }
// go run goredis-server.go -h localhost -p 1602 // go run goredis-server.go -procs 8 -p 17600 // go run goredis-server.go -slaveof localhost:1603 // go run goredis-server.go -dbpath /data/ -logpath /home/logs/ func main() { version := flag.Bool("v", false, "print version") host := flag.String("h", "0.0.0.0", "server host") port := flag.Int("p", 1602, "server port") slaveof := flag.String("slaveof", "", "replication") procs := flag.Int("procs", 8, "GOMAXPROCS, CPU") repair := flag.Bool("repair", false, "repair rocksdb") dbpath := flag.String("dbpath", "/data/", "rocksdb path, recommend use SSD") logpath := flag.String("logpath", "/data/", "all logs, include synclog,aof") flag.Parse() if *version { fmt.Println("goredis-server", goredis_server.VERSION) return } if !dirExist(*dbpath) { stdlog.Println("-dbpath", *dbpath, "not exist") return } if !dirExist(*logpath) { stdlog.Println("-logpath", *logpath, "not exist") return } runtime.GOMAXPROCS(*procs) // Options opt := goredis_server.NewOptions() opt.SetHost(*host) opt.SetPort(*port) opt.SetDBPath(joinGoRedisPath(*dbpath, *port)) opt.SetLogPath(joinGoRedisPath(*logpath, *port)) // ensure os.Mkdir(opt.DBPath(), os.ModePerm) os.Mkdir(opt.LogPath(), os.ModePerm) // split -slaveof host:port if len(*slaveof) > 0 { hostPort := strings.Split(*slaveof, ":") if len(hostPort) != 2 { panic("bad slaveof") } p, e := strconv.Atoi(hostPort[1]) if e != nil { panic(e) } opt.SetSlaveOf(hostPort[0], p) } // 重定向日志输出位置 if err := redirectStdout(opt.LogPath()); err != nil { panic(err) } // repair if *repair { dbhome := filepath.Join(opt.DBPath(), "db0") if !dirExist(dbhome) { stdlog.Println("db not exist") } else { stdlog.Println("start repair", dbhome) levelredis.Repair(dbhome) stdlog.Println("repair finish") } return } stdlog.Println("========================================") stdlog.Println("server init, version", goredis_server.VERSION, "...") stdlog.Printf("dbpath:%s, logpath:%s\n", opt.DBPath(), opt.LogPath()) // GoRedis Server server := goredis_server.NewGoRedisServer(opt) if err := server.Init(); err != nil { panic(err) } if err := server.Listen(); err != nil { panic(err) } }