Skip to content

Commit 9d876be

Browse files
committed
基础配置
1 parent 7ad490d commit 9d876be

10 files changed

+168
-15
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
.idea/.gitignore
33
.idea/misc.xml
44
.idea/modules.xml
5-
.idea/redis-migrate.iml
5+
.idea/redis-tool.iml
66
.idea/vcs.xml

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
# redis-migrate
1+
# redis-tool
22
Redis 数据迁移

cmd/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
package main
99

10-
import "github.com/icowan/redis-migrate/cmd/migrate"
10+
import "github.com/icowan/redis-tool/cmd/migrate"
1111

1212
func main() {
1313
migrate.Run()

cmd/migrate/migrate.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"github.com/pkg/errors"
1515
"github.com/spf13/cobra"
1616

17-
"github.com/icowan/redis-migrate/redis"
17+
"github.com/icowan/redis-tool/redis"
1818
)
1919

2020
var (
@@ -28,26 +28,25 @@ var (
2828
targetRedis redis.RedisInterface
2929

3030
rootCmd = &cobra.Command{
31-
Use: "redis-migrate",
31+
Use: "redis-tool",
3232
Short: "",
3333
SilenceErrors: true,
3434
DisableAutoGenTag: true,
3535
Long: `# redis 迁移工具
3636
可用的配置类型:
3737
[migrate]
38-
有关本系统的相关概述,请参阅 http://gitlab.creditease.corp/yqz/invite-admin
38+
有关本系统的相关概述,请参阅 https://github.com/icowan/redis-tool
3939
`,
4040
}
4141

4242
migrateRedisCmd = &cobra.Command{
4343
Use: `migrate command <args> [flags]`,
44-
Short: "redis 迁移命令",
44+
Short: "数据迁移命令",
4545
SilenceErrors: false,
4646
DisableAutoGenTag: false,
4747
Example: `
4848
支持命令:
4949
[hash, set, sorted-set]
50-
redis-migrate migrate -h
5150
`,
5251
}
5352
)

cmd/migrate/migrate_all.go

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/**
2+
* @Time: 2020/8/8 17:32
3+
* @Author: [email protected]
4+
* @File: migrate_all
5+
* @Software: GoLand
6+
*/
7+
8+
package migrate
9+
10+
import (
11+
"fmt"
12+
"log"
13+
"math"
14+
"time"
15+
16+
"github.com/pkg/errors"
17+
"github.com/spf13/cobra"
18+
)
19+
20+
var (
21+
migrateRedisAllCmd = &cobra.Command{
22+
Use: `all <args> [flags]`,
23+
Short: "迁移所有",
24+
SilenceErrors: false,
25+
DisableAutoGenTag: false,
26+
Example: `
27+
redis-tool migrate all {key} --source-hosts 127.0.0.1:6379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
28+
`,
29+
RunE: func(cmd *cobra.Command, args []string) error {
30+
// 关闭资源连接
31+
defer func() {
32+
log.Printf("source redis close err: %v", sourceRedis.Close())
33+
log.Printf("target redis close err: %v", targetRedis.Close())
34+
}()
35+
var key string
36+
if len(args) == 1 {
37+
key = args[0]
38+
}
39+
return migrateRedisAll(key)
40+
},
41+
PreRunE: func(cmd *cobra.Command, args []string) error {
42+
if err = prepare(); err != nil {
43+
fmt.Println(fmt.Sprintf("prepare error: %s", err.Error()))
44+
return err
45+
}
46+
return nil
47+
},
48+
}
49+
)
50+
51+
func migrateRedisAll(key string) error {
52+
begin := time.Now()
53+
54+
keys, err := sourceRedis.Keys(key)
55+
if err != nil {
56+
err = errors.Wrap(err, "sourceRedis.Keys")
57+
return err
58+
}
59+
var total = len(keys)
60+
61+
fmt.Println(fmt.Sprintf("Key: [%s] 总数: [%d]", key, total))
62+
var base float64 = 50000
63+
64+
step := math.Ceil(float64(total) / base)
65+
66+
fmt.Println(step)
67+
68+
for _, v := range keys {
69+
// 判断类型
70+
// 只支持 set, hash, list, sortedSet 其他的跳过
71+
72+
fmt.Println(v)
73+
}
74+
75+
fmt.Println(fmt.Sprintf("迁移完成, 用时 [%v]", time.Since(begin)))
76+
77+
return nil
78+
}

cmd/migrate/migrate_hash.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ import (
2121
var (
2222
migrateRedisHashCmd = &cobra.Command{
2323
Use: `hash <args> [flags]`,
24-
Short: "哈希列表",
24+
Short: "哈希列表迁移",
2525
SilenceErrors: false,
2626
DisableAutoGenTag: false,
2727
Example: `
28-
redis-tool migrate hash {key} --source-redis-cluster true --source-hosts 127.0.0.1:6379,127.0.0.1:7379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
28+
redis-tool migrate hash {key} --source-hosts 127.0.0.1:6379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
2929
`,
3030
RunE: func(cmd *cobra.Command, args []string) error {
3131
// 关闭资源连接

cmd/migrate/migrate_list.go

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* @Time: 2020/8/8 17:29
3+
* @Author: [email protected]
4+
* @File: migrate_list
5+
* @Software: GoLand
6+
*/
7+
8+
package migrate
9+
10+
import (
11+
"fmt"
12+
"log"
13+
"time"
14+
15+
"github.com/pkg/errors"
16+
"github.com/spf13/cobra"
17+
)
18+
19+
var (
20+
migrateRedisListCmd = &cobra.Command{
21+
Use: `list <args> [flags]`,
22+
Short: "列表迁移",
23+
SilenceErrors: false,
24+
DisableAutoGenTag: false,
25+
Example: `
26+
redis-tool migrate list {key} --source-hosts 127.0.0.1:6379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
27+
`,
28+
RunE: func(cmd *cobra.Command, args []string) error {
29+
// 关闭资源连接
30+
defer func() {
31+
log.Printf("source redis close err: %v", sourceRedis.Close())
32+
log.Printf("target redis close err: %v", targetRedis.Close())
33+
}()
34+
if len(args) < 1 {
35+
fmt.Println("至少需要一个参数")
36+
return errors.New("参数错误")
37+
}
38+
return migrateRedisList(args[0])
39+
},
40+
PreRunE: func(cmd *cobra.Command, args []string) error {
41+
if err = prepare(); err != nil {
42+
fmt.Println(fmt.Sprintf("prepare error: %s", err.Error()))
43+
return err
44+
}
45+
return nil
46+
},
47+
}
48+
)
49+
50+
func migrateRedisList(key string) error {
51+
begin := time.Now()
52+
53+
res, err := sourceRedis.Keys(key)
54+
if err != nil {
55+
err = errors.Wrap(err, "sourceRedis.Keys")
56+
return err
57+
}
58+
59+
fmt.Println(fmt.Sprintf("Key: [%s] 总数: [%d]", key, len(res)))
60+
61+
for _, val := range res {
62+
v, err := sourceRedis.Get(val)
63+
if err != nil || v == "" {
64+
fmt.Println(fmt.Sprintf("迁移: [%s] --> failure: %s", val, "key不存在"))
65+
continue
66+
}
67+
68+
if err = targetRedis.Set(val, v, sourceRedis.TTL(val)); err != nil {
69+
fmt.Println(fmt.Sprintf("迁移: [%s] --> failure: %s", val, err.Error()))
70+
continue
71+
}
72+
}
73+
fmt.Println(fmt.Sprintf("迁移完成, 用时 [%v]", time.Since(begin)))
74+
75+
return nil
76+
}

cmd/migrate/migrate_set.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import (
1919
var (
2020
migrateRedisSetCmd = &cobra.Command{
2121
Use: `set <args> [flags]`,
22-
Short: "redis set",
22+
Short: "redis set 迁移",
2323
SilenceErrors: false,
2424
DisableAutoGenTag: false,
2525
Example: `
26-
redis-tool migrate set {key} --source-redis-cluster true --source-hosts 127.0.0.1:6379,127.0.0.1:7379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
26+
redis-tool migrate set {key} --source-hosts 127.0.0.1:6379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
2727
`,
2828
RunE: func(cmd *cobra.Command, args []string) error {
2929
// 关闭资源连接

cmd/migrate/migrate_sorted-set.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ import (
2121
var (
2222
migrateRedisSortedSetCmd = &cobra.Command{
2323
Use: `sorted-set <args> [flags]`,
24-
Short: "有序集合",
24+
Short: "有序集合迁移",
2525
SilenceErrors: false,
2626
DisableAutoGenTag: false,
2727
Example: `
28-
redis-tool migrate sorted-set {key} --source-redis-cluster true --source-hosts 127.0.0.1:6379,127.0.0.1:7379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
28+
redis-tool migrate sorted-set {key} --source-hosts 127.0.0.1:6379 --source-auth 123456 --target-redis-cluster true --target-hosts 127.0.0.1:6379,127.0.0.1:7379 --target-auth 123456
2929
`,
3030
RunE: func(cmd *cobra.Command, args []string) error {
3131
// 关闭资源连接

go.sum

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
5656
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
5757
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
5858
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
59-
github.com/icowan/redis-migrate v0.0.0-20200808043525-7d0912631302 h1:swOmnOvIZrgU+vgBWJdaZmdmTMKD2Vzi1m05PXFjhoQ=
59+
github.com/icowan/redis-tool v0.0.0-20200808043525-7d0912631302 h1:swOmnOvIZrgU+vgBWJdaZmdmTMKD2Vzi1m05PXFjhoQ=
6060
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
6161
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
6262
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=

0 commit comments

Comments
 (0)