golangの実際のプロジェクトでredisクラスターに接続するときに発生するピット

       プロジェクトのredisは、awsのredisサービスを直接使用します。redisはクラスターです。つまり、次のように、redisクラスターに接続するときにgolangが遭遇するピットです。

       まず、私はredisgoを使用します。これは、APIを見る方が便利で、redis-cliに似ており、awsも推奨されるためです。その後、最初は接続に問題はなく、10回以上展開しましたが、ある日展開しました。redisの操作中にサーバーが突然エラーを報告しました。「(エラー)MOVED xxxx xxx.xxx.xxx.xxx:xxxx」をクエリしたところ、redisがクラスターへの接続を選択しなかったことがわかりました。もう一度確認したところ、awsが2つのredisライブラリredisgoとgoを公式に推奨していることがわかりました。 -redis 2つのライブラリ、redisgoはクラスターをサポートしていません(残念です)。問題なく何度もデプロイしました。常にマスターに接続されていた可能性があり、スレーブに接続する突然エラーが報告されました。幸いなことに、それは早期に発見されました。

       go-redis / redisがデータベースに接続すると、公式デモで多数のポートが提供されます。

import "github.com/go-redis/redis/v8"

rdb := redis.NewClusterClient(&redis.ClusterOptions{
    Addrs: []string{":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},

    // To route commands by latency or randomly, enable one of the following.
    //RouteByLatency: true,
    //RouteRandomly: true,
})

      文字列のスライスに自分のアドレスを入力する限り、これには複数のアドレスを入力できます。アドレスが1つしかない場合は、1つだけ入力します(プロジェクトのredisクラスターは1つのアドレスのみを外部に公開できます)

clusterClient = redis.NewClusterClient(&redis.ClusterOptions{
	Addrs: []string{"your addr1"},
})

      redis.NewClusterClientインターフェースはデフォルトでマスターに接続されています。スレーブにのみ接続する場合は、パラメーターを使用して制御できます。詳細については、インターフェースの説明を確認してください。

      最終的にパッケージを切り替えた後、redisクラスター接続の問題は正常に解決されました。

おすすめ

転載: blog.csdn.net/banfushen007/article/details/113175322