クライアントのベストプラクティス (Valkey と Redis OSS) - Amazon ElastiCache

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クライアントのベストプラクティス (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 プロトコルを設定します。これらのコマンドは、クライアントがクラスタートポロジを検出するために使用されます。クライアントは、これらのコマンドIPsの を使用して、クラスター内の他のノードに接続します。

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; }));