当前位置:   article > 正文

redis集群数据迁移到单节点或哨兵模式上-快速复用

redis集群数据迁移到单节点或哨兵模式上-快速复用

背景:

网上基本是都是通过rdb、aof、或者用redis-dump来实现数据迁移,步骤都挺复杂的,完全可以通过go直接编译一个可执行程序来实现可快实现快速迁移。

注意点:

由于集群模式数据是分散的,所以复制的过程还需要考虑MOVED的情况

内容:

1、安装依赖库

go get github.com/go-redis/redis

2.代码内容

下面是参考代码,可以修改ip、端口与密码参数并根据自己需要进行调整

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "strings"
  6. "github.com/go-redis/redis"
  7. )
  8. func main() {
  9. // 连接源 Redis 集群
  10. sourceClient := redis.NewClusterClient(&redis.ClusterOptions{
  11. Addrs: []string{"172.16.0.12:7001", "172.16.0.12:7002", "172.16.0.12:7003", "172.16.0.15:7001", "172.16.0.15:7002", "172.16.0.15:7003"},
  12. Password: "auth-password",
  13. })
  14. // 连接目标 Redis 服务器
  15. destClient := redis.NewClient(&redis.Options{
  16. Addr: "目标RedisIP:目标Redis端口",
  17. Password: "auth-password",
  18. })
  19. // 获取源 Redis 集群中的所有键
  20. keys, err := sourceClient.Keys("*").Result()
  21. if err != nil {
  22. log.Fatal(err)
  23. }
  24. // 遍历所有键并导入到目标 Redis 服务器
  25. for _, key := range keys {
  26. val, err := sourceClient.Get(key).Result()
  27. if err != nil {
  28. log.Printf("Failed to get key %s: %v", key, err)
  29. continue
  30. }
  31. err = destClient.Set(key, val, 0).Err()
  32. if err != nil {
  33. if strings.Contains(err.Error(), "MOVED") {
  34. parts := strings.Fields(err.Error())
  35. addr := parts[2]
  36. sourceClient := redis.NewClusterClient(&redis.ClusterOptions{
  37. Addrs: []string{addr},
  38. Password: "auth-password",
  39. })
  40. val, err := sourceClient.Get(key).Result()
  41. if err != nil {
  42. log.Printf("Failed to get key %s: %v", key, err)
  43. continue
  44. }
  45. err = destClient.Set(key, val, 0).Err()
  46. if err != nil {
  47. log.Printf("Failed to set key %s: %v", key, err)
  48. continue
  49. }
  50. fmt.Printf("Key %s moved from %s, successfully imported.\n", key, addr)
  51. } else {
  52. log.Printf("Failed to set key %s: %v", key, err)
  53. continue
  54. }
  55. }
  56. fmt.Printf("Key %s imported successfully.\n", key)
  57. }
  58. fmt.Println("Data migration completed.")
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/364499
推荐阅读
相关标签
  

闽ICP备14008679号