Praktik terbaik untuk klien (Valkey dan Redis) OSS - Amazon ElastiCache

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Praktik terbaik untuk klien (Valkey dan Redis) OSS

Pelajari praktik terbaik untuk skenario umum dan ikuti contoh kode dari beberapa pustaka OSS klien Valkey dan Redis open source paling populer (redis-py,, dan Lettuce)PHPRedis, serta praktik terbaik untuk berinteraksi dengan ElastiCache sumber daya dengan pustaka klien Memcached open-source yang umum digunakan.

Mengkonfigurasi protokol pilihan untuk cluster tumpukan ganda (Valkey dan Redis) OSS

Untuk mode cluster diaktifkan Valkey atau Redis OSS cluster, Anda dapat mengontrol protokol yang akan digunakan klien untuk terhubung ke node di cluster dengan parameter IP Discovery. Parameter IP Discovery dapat diatur ke salah satu IPv4 atauIPv6.

Untuk OSS cluster Valkey atau Redis, parameter penemuan IP menetapkan protokol IP yang digunakan dalam slot cluster (), cluster shards (), dan cluster node () output. Perintah tersebut digunakan oleh klien untuk menemukan topologi klaster. Klien menggunakan perintah IPs in theses untuk terhubung ke node lain di cluster.

Perubahan pada Penemuan IP tidak akan mengakibatkan waktu henti untuk klien yang terhubung. Namun, perubahan ini akan memakan waktu untuk disebarkan. Untuk menentukan kapan perubahan telah sepenuhnya disebarkan untuk Valkey atau Redis OSS Cluster, pantau output dari. cluster slots Setelah semua node dikembalikan oleh laporan perintah slot cluster IPs dengan protokol baru, perubahan telah selesai menyebar.

Contoh dengan 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)

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