翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クライアントのベストプラクティス (Valkey と Redis OSS)
一般的なシナリオのベストプラクティスと、最も一般的なオープンソースの Valkey および Redis OSSクライアントライブラリ (redis-py、PHPRedis、Lettuce) のコード例、および一般的に使用されるオープンソースの Memcached クライアントライブラリと ElastiCache リソースを操作するためのベストプラクティスについて説明します。
トピック
デュアルスタッククラスターの優先プロトコルの設定 (Valkey および Redis OSS)
クラスターモードが有効になっている Valkey または Redis OSSクラスターの場合、IP Discovery パラメータを使用してクラスター内のノードへの接続に使用するプロトコルクライアントを制御できます。IP Discovery パラメータは、 IPv4または のいずれかに設定できますIPv6。
Valkey または Redis OSSクラスターの場合、IP 検出パラメータは、クラスタースロット ()
IP 検出を変更しても、接続しているクライアントのダウンタイムは発生しません。ただし、変更が反映されるまで時間がかかる場合があります。Valkey または Redis OSSクラスターに変更が完全に伝達されたタイミングを確認するには、 の出力をモニタリングしますcluster slots
。クラスタースロットコマンドによって返されたすべてのノードが新しいプロトコルIPsとともにレポートされると、変更の伝播は完了します。
Redis-Py を使った例:
cluster = RedisCluster(host="xxxx", port=6379) target_type = IPv6Address # Or IPv4Address if changing to IPv4 nodes = set() while len(nodes) == 0 or not all((type(ip_address(host)) is target_type) for host in nodes): nodes = set() # This refreshes the cluster topology and will discovery any node updates. # Under the hood it calls cluster slots cluster.nodes_manager.initialize() for node in cluster.get_nodes(): nodes.add(node.host) self.logger.info(nodes) time.sleep(1)
Lettuce の例:
RedisClusterClient clusterClient = RedisClusterClient.create(RedisURI.create("xxxx", 6379)); Class targetProtocolType = Inet6Address.class; // Or Inet4Address.class if you're switching to IPv4 Set<String> nodes; do { // Check for any changes in the cluster topology. // Under the hood this calls cluster slots clusterClient.refreshPartitions(); Set<String> nodes = new HashSet<>(); for (RedisClusterNode node : clusterClient.getPartitions().getPartitions()) { nodes.add(node.getUri().getHost()); } Thread.sleep(1000); } while (!nodes.stream().allMatch(node -> { try { return finalTargetProtocolType.isInstance(InetAddress.getByName(node)); } catch (UnknownHostException ignored) {} return false; }));