Jika Anda membeli instans Tair (Redis OSS-compatible) dengan mode koneksi langsung diaktifkan, Anda dapat bermigrasi secara mulus dari kluster Redis asli ke instans cluster. Titik akhir pribadi dari Tair (Redis OSS-compatible) mendukung protokol Redis Cluster asli. Dalam mode ini, klien dapat terhubung langsung ke server data, memberikan respons yang lebih cepat.
Prasyarat
Mode koneksi langsung harus diaktifkan pada instans cluster Anda. Untuk informasi lebih lanjut, lihat Aktifkan Mode Koneksi Langsung.
Alamat IP klien harus ditambahkan ke daftar putih instans cluster Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan Daftar Putih.
Gunakan klien yang mendukung protokol Redis Cluster, seperti Jedis dan PhpRedis.
CatatanJika menggunakan klien yang tidak mendukung protokol Redis Cluster, permintaan mungkin gagal karena klien tidak dapat mengarahkan ulang ke shard yang benar.
Daftar klien yang mendukung protokol Redis Cluster tersedia di halaman Klien situs resmi Redis.
Instans Elastic Compute Service (ECS) tempat klien berada dan instans cluster harus berada dalam virtual private cloud (VPC) yang sama.
Informasi latar belakang
Saat mengaktifkan mode koneksi langsung untuk instans cluster, Tair (Redis OSS-compatible) mengalokasikan alamat IP virtual (VIP) ke node master setiap data shard dalam instans cluster. Untuk informasi lebih lanjut, lihat Aktifkan Mode Koneksi Langsung. Sebelum klien mengirimkan permintaan pertama ke titik akhir pribadi, klien menggunakan server Domain Name System (DNS) untuk menyelesaikan titik akhir tersebut. Hasil penyelesaiannya adalah VIP dari shard data acak dalam instans cluster. Klien dapat menggunakan VIP ini untuk mengelola data instans sesuai protokol Redis Cluster. Gambar berikut menunjukkan arsitektur instans cluster dalam mode koneksi langsung.
Catatan penggunaan
Instans dengan arsitektur berbeda memiliki dukungan berbeda untuk perintah Redis asli. Misalnya, arsitektur cluster memiliki batasan pada skrip Lua. Untuk informasi lebih lanjut, lihat Batasan pada Perintah yang Didukung oleh Instans Cluster dan Instans Pembagian Baca/Tulis.
Jika mengubah konfigurasi instans cluster dalam mode koneksi langsung, migrasi slot akan dilakukan. Dalam kasus ini, klien mungkin mengembalikan pesan kesalahan seperti
MOVEDdanTRYAGAINsaat mengakses slot yang sedang dimigrasi. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Instans. Untuk memastikan eksekusi permintaan berhasil, konfigurasikan mekanisme ulang untuk klien. Untuk informasi lebih lanjut, lihat Mekanisme Ulang untuk Klien.Dalam mode koneksi langsung, Anda dapat menggunakan perintah SELECT untuk beralih ke database yang diinginkan. Namun, beberapa klien Redis Cluster, seperti StackExchange.Redis, tidak mendukung perintah SELECT. Jika menggunakan salah satu klien ini, Anda hanya dapat menggunakan DB0.
Titik akhir pribadi hanya dapat digunakan untuk mengakses instans cluster melalui jaringan internal Alibaba Cloud. Saat menggunakan titik akhir pribadi instans cluster, akses tanpa kata sandi dan otentikasi akun dan kata sandi didukung.
redis-cli
Gunakan titik akhir pribadi untuk menghubungkan ke instans cluster dari redis-cli.
Saat menggunakan titik akhir pribadi untuk menghubungkan ke instans cluster dari redis-cli, tambahkan parameter -c ke perintah. Jika tidak, koneksi akan gagal.
./redis-cli -h r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com -p 6379 -cVerifikasi kata sandi akun database Anda.
AUTH testaccount:Rp829dlwaUntuk informasi lebih lanjut, lihat Gunakan redis-cli untuk Menghubungkan ke Instans.
Jedis
Contoh ini menggunakan Jedis 4.3.0. Untuk informasi lebih lanjut, kunjungi GitHub.
Kolam Koneksi Kustom (Direkomendasikan)
import redis.clients.jedis.*; import java.util.HashSet; import java.util.Set; public class DirectTest { private static final int DEFAULT_TIMEOUT = 2000; private static final int DEFAULT_REDIRECTIONS = 5; private static final ConnectionPoolConfig config = new ConnectionPoolConfig(); public static void main(String args[]) { // Tentukan jumlah maksimum koneksi. Dalam mode koneksi langsung, klien langsung terhubung ke shard dari instans cluster. Oleh karena itu, persyaratan berikut harus dipenuhi: Jumlah klien × Nilai MaxTotal < Jumlah maksimum koneksi ke satu shard. config.setMaxTotal(30); // Tentukan jumlah maksimum koneksi idle berdasarkan kebutuhan bisnis Anda. config.setMaxIdle(20); config.setMinIdle(15); // Tentukan titik akhir pribadi yang dialokasikan untuk instans cluster. String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com"; int port = 6379; // Tentukan kata sandi yang digunakan untuk terhubung ke instans cluster. String password = "xxxxx"; Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort(host, port)); JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS, password, "clientName", config); jc.set("key", "value"); jc.get("key"); jc.close(); // Jika aplikasi keluar dan Anda ingin menghapus sumber daya, panggil metode ini. Dengan cara ini, koneksi ditutup, dan sumber daya dilepaskan. } }Kolam Koneksi Default
import redis.clients.jedis.ConnectionPoolConfig; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import java.util.HashSet; import java.util.Set; public class DirectTest{ private static final int DEFAULT_TIMEOUT = 2000; private static final int DEFAULT_REDIRECTIONS = 5; private static final ConnectionPoolConfig DEFAULT_CONFIG = new ConnectionPoolConfig(); public static void main(String args[]){ // Tentukan titik akhir pribadi yang dialokasikan untuk instans cluster. String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com"; int port = 6379; String password = "xxxx"; Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort(host, port)); JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS,password, "clientName", DEFAULT_CONFIG); jc.set("key","value"); jc.get("key"); jc.close(); // Jika aplikasi keluar dan Anda ingin menghapus sumber daya, panggil metode ini. Dengan cara ini, koneksi ditutup, dan sumber daya dilepaskan. } }
PhpRedis
Contoh ini menggunakan PhpRedis 5.3.7. Untuk informasi lebih lanjut, kunjungi GitHub.
<?php
// Tentukan titik akhir pribadi dan nomor port yang digunakan untuk terhubung ke instans cluster.
$array = ['r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com:6379'];
// Tentukan kata sandi yang digunakan untuk terhubung ke instans cluster.
$pwd = "xxxx";
// Gunakan kata sandi untuk terhubung ke instans cluster.
$obj_cluster = new RedisCluster(NULL, $array, 1.5, 1.5, true, $pwd);
// Tampilkan hasil koneksi.
var_dump($obj_cluster);
if ($obj_cluster->set("foo", "bar") == false) {
die($obj_cluster->getLastError());
}
$value = $obj_cluster->get("foo");
echo $value;
?>redis-py
Contoh ini menggunakan Python 3.9 dan redis-py 4.4.1. Untuk informasi lebih lanjut, kunjungi GitHub.
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from redis.cluster import RedisCluster
# Ganti nilai parameter host dan port dengan titik akhir dan nomor port yang digunakan untuk terhubung ke instans.
host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com'
port = 6379
# Ganti nilai parameter user dan pwd dengan nama pengguna dan kata sandi yang digunakan untuk terhubung ke instans.
user = 'testaccount'
pwd = 'Rp829dlwa'
rc = RedisCluster(host=host, port=port, username=user, password=pwd)
# Anda dapat melakukan operasi pada instans setelah koneksi dibuat. Kode berikut memberikan contoh tentang cara memanggil metode set dan get:
rc.set('foo', 'bar')
print(rc.get('foo'))Spring Data Redis
Proyek sampel berikut dibuat menggunakan Maven. Anda juga dapat mengunduh klien Lettuce atau Jedis secara manual.
Tambahkan dependensi Maven berikut:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.aliyun.tair</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-example</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>6.3.0.RELEASE</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-epoll</artifactId> <version>4.1.100.Final</version> <classifier>linux-x86_64</classifier> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>Masukkan kode berikut di editor Spring Data Redis dan modifikasi berdasarkan komentar.
Contoh ini menggunakan Spring Data Redis 2.4.2.
(Direkomendasikan) Spring Data Redis dengan Jedis
@Bean JedisConnectionFactory redisConnectionFactory() { List<String> clusterNodes = Arrays.asList("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379"); RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(clusterNodes); redisClusterConfiguration.setUsername("user"); redisClusterConfiguration.setPassword("password"); JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // Tentukan jumlah maksimum koneksi idle. Dalam mode koneksi langsung, klien langsung terhubung ke shard dari instans cluster. Oleh karena itu, persyaratan berikut harus dipenuhi: Jumlah klien × Nilai MaxTotal < Jumlah maksimum koneksi ke satu shard. jedisPoolConfig.setMaxTotal(30); // Tentukan jumlah maksimum koneksi idle berdasarkan kebutuhan bisnis Anda. jedisPoolConfig.setMaxIdle(20); // Nonaktifkan testOn[Borrow|Return] untuk mencegah menghasilkan perintah ping tambahan. jedisPoolConfig.setTestOnBorrow(false); jedisPoolConfig.setTestOnReturn(false); return new JedisConnectionFactory(redisClusterConfiguration, jedisPoolConfig); }Spring Data Redis dengan Lettuce
PeringatanKonfigurasi default Lettuce dapat menyebabkan masalah seperti latensi aplikasi meningkat dan ketidaktersediaan saat instans diubah. Untuk mengonfigurasi Lettuce dengan benar, bacalah deskripsi parameter terkait Lettuce.
Versi Lettuce harus 6.3.0.RELEASE atau lebih baru. Untuk informasi lebih lanjut, lihat [Pemberitahuan] Saran untuk Pemutakhiran Lettuce.
/** * Aktifkan TCP keepalive dan konfigurasikan tiga parameter berikut: * TCP_KEEPIDLE = 30 * TCP_KEEPINTVL = 10 * TCP_KEEPCNT = 3 */ private static final int TCP_KEEPALIVE_IDLE = 30; /** * Anda dapat menggunakan parameter TCP_USER_TIMEOUT untuk menghindari situasi di mana Lettuce tetap macet dalam loop timeout terus-menerus selama kejadian kegagalan atau crash. * refer: https://github.com/lettuce-io/lettuce-core/issues/2082 */ private static final int TCP_USER_TIMEOUT = 30; @Bean public LettuceConnectionFactory redisConnectionFactory() { List<String> clusterNodes = Arrays.asList("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379"); RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(clusterNodes); redisClusterConfiguration.setUsername("user"); redisClusterConfiguration.setPassword("password"); // Konfigurasi TCP KeepAlive SocketOptions socketOptions = SocketOptions.builder() .keepAlive(KeepAliveOptions.builder() .enable() .idle(Duration.ofSeconds(TCP_KEEPALIVE_IDLE)) .interval(Duration.ofSeconds(TCP_KEEPALIVE_IDLE / 3)) .count(3) .build()) .tcpUserTimeout(TcpUserTimeoutOptions.builder() .enable() .tcpUserTimeout(Duration.ofSeconds(TCP_USER_TIMEOUT)) .build()) .build(); ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() .enablePeriodicRefresh(Duration.ofSeconds(60)) .dynamicRefreshSources(false) .enableAllAdaptiveRefreshTriggers() .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(15)).build(); LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder(). clientOptions(ClusterClientOptions.builder() .socketOptions(socketOptions) .validateClusterNodeMembership(false) .topologyRefreshOptions(topologyRefreshOptions).build()).build(); return new LettuceConnectionFactory(redisClusterConfiguration, lettuceClientConfiguration); }
.NET
Contoh ini menggunakan .NET 6.0 dan StackExchange.Redis 2.6.90.
using StackExchange.Redis;
class RedisConnSingleton {
// Tentukan titik akhir, nomor port, nama pengguna, dan kata sandi yang digunakan untuk terhubung ke instans cluster.
private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379,user=testaccount,password=Rp829dlwa,connectTimeout=2000");
//lock untuk singleton
private static readonly object Locker = new object();
//singleton
private static ConnectionMultiplexer redisConn;
//singleton
public static ConnectionMultiplexer getRedisConn()
{
if (redisConn == null)
{
lock (Locker)
{
if (redisConn == null || !redisConn.IsConnected)
{
redisConn = ConnectionMultiplexer.Connect(configurationOptions);
}
}
}
return redisConn;
}
}
class Program
{
static void Main(string[] args)
{
ConnectionMultiplexer cm = RedisConnSingleton.getRedisConn();
var db = cm.GetDatabase();
db.StringSet("key", "value");
String ret = db.StringGet("key");
Console.WriteLine("get key: " + ret);
}
}node-redis
Contoh ini menggunakan Node.js 19.4.0 dan node-redis 4.5.1.
import { createCluster } from 'redis';
// Tentukan titik akhir, nomor port, nama pengguna, dan kata sandi yang digunakan untuk terhubung ke instans.
// Setelah Anda menyediakan nama pengguna dan kata sandi untuk parameter url, Anda juga harus menyediakan nama pengguna dan kata sandi global untuk parameter defaults.
// Nama pengguna dan kata sandi global digunakan untuk mengautentikasi node yang tersisa. Jika node yang tersisa tidak diautentikasi, kesalahan NOAUTH terjadi.
const cluster = createCluster({
rootNodes: [{
url: 'redis://testaccount:Rp829dlwa@r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379'
}],
defaults: {
username: 'testaccount',
password: 'Rp829dlwa'
}
});
cluster.on('error', (err) => console.log('Redis Cluster Error', err));
await cluster.connect();
await cluster.set('key', 'value');
const value = await cluster.get('key');
console.log('get key: %s', value);
await cluster.disconnect();
Go-redis
Contoh ini menggunakan Go 1.19.7 dan go-redis 9.5.1.
Gunakan go-redis versi 9.0 atau lebih baru. Jika menggunakan versi sebelum 9.0, kesalahan ketidakcocokan mungkin terjadi saat terhubung ke titik akhir pribadi. Untuk informasi lebih lanjut, lihat Kesalahan Umum dan Pemecahan Masalah.
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v9"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{"r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379"},
Username: "testaccount",
Password: "Rp829dlwa",
})
err := rdb.Set(ctx, "key", "value", 0).Err()
if err != nil {
panic(err)
}
val, err := rdb.Get(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println("key", val)
}Lettuce
Konfigurasi default Lettuce dapat menyebabkan masalah seperti latensi aplikasi meningkat dan ketidaktersediaan saat instans diubah. Untuk mengonfigurasi Lettuce dengan benar, bacalah deskripsi parameter terkait Lettuce.
Versi Lettuce harus 6.3.0.RELEASE atau lebih baru. Untuk informasi lebih lanjut, lihat [Pemberitahuan] Saran untuk Pemutakhiran Lettuce.
Tambahkan dependensi Maven berikut:
<dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>6.3.0.RELEASE</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-epoll</artifactId> <version>4.1.65.Final</version> <classifier>linux-x86_64</classifier> </dependency>Tambahkan kode berikut dan modifikasi berdasarkan komentar:
import io.lettuce.core.RedisURI; import io.lettuce.core.SocketOptions; import io.lettuce.core.cluster.ClusterClientOptions; import io.lettuce.core.cluster.ClusterTopologyRefreshOptions; import io.lettuce.core.cluster.RedisClusterClient; import io.lettuce.core.cluster.api.StatefulRedisClusterConnection; import java.time.Duration; public class ClusterDemo { /** * Aktifkan TCP keepalive dan konfigurasikan tiga parameter berikut: * TCP_KEEPIDLE = 30 * TCP_KEEPINTVL = 10 * TCP_KEEPCNT = 3 */ private static final int TCP_KEEPALIVE_IDLE = 30; /** * Parameter TCP_USER_TIMEOUT dapat menghindari situasi di mana Lettuce tetap macet dalam loop timeout terus-menerus selama kejadian kegagalan atau crash. * refer: https://github.com/lettuce-io/lettuce-core/issues/2082 */ private static final int TCP_USER_TIMEOUT = 30; public static void main(String[] args) throws Exception { // Ganti nilai host, port, dan password dengan informasi instans aktual. String host = "r-bp1ln3c4kopj3l****.redis.rds.aliyuncs.com"; int port = 6379; String password = "Da****3"; RedisURI redisURI = RedisURI.Builder.redis(host) .withPort(port) .withPassword(password) .build(); ClusterTopologyRefreshOptions refreshOptions = ClusterTopologyRefreshOptions.builder() .enablePeriodicRefresh(Duration.ofSeconds(60)) .dynamicRefreshSources(false) .enableAllAdaptiveRefreshTriggers() .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(15)).build(); // Konfigurasi TCP KeepAlive SocketOptions socketOptions = SocketOptions.builder() .keepAlive(SocketOptions.KeepAliveOptions.builder() .enable() .idle(Duration.ofSeconds(TCP_KEEPALIVE_IDLE)) .interval(Duration.ofSeconds(TCP_KEEPALIVE_IDLE/3)) .count(3) .build()) .tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder() .enable() .tcpUserTimeout(Duration.ofSeconds(TCP_USER_TIMEOUT)) .build()) .build(); RedisClusterClient redisClient = RedisClusterClient.create(redisURI); redisClient.setOptions(ClusterClientOptions.builder() .socketOptions(socketOptions) .validateClusterNodeMembership(false) .topologyRefreshOptions(refreshOptions).build()); StatefulRedisClusterConnection<String, String> connection = redisClient.connect(); connection.sync().set("key", "value"); System.out.println(connection.sync().get("key")); } }Jalankan kode sebelumnya. Keluaran berikut diharapkan pada penyelesaian yang berhasil:
value
Tabel berikut menjelaskan parameter terkait Lettuce.
Parameter | Konfigurasi default | Deskripsi | Konfigurasi yang direkomendasikan |
enablePeriodicRefresh(Duration refreshPeriod) | Dinonaktifkan | Mengaktifkan penyegaran topologi kluster secara berkala. | Kami sarankan Anda menyetel periode penyegaran menjadi 60 detik. Mengaktifkan opsi ini memastikan bahwa bahkan koneksi persisten yang tidak aktif tetap memiliki pandangan terbaru tentang topologi lokal. |
dynamicRefreshSources(boolean dynamicRefreshSources) | true | Jika parameter ini disetel ke true, semua node yang dikembalikan oleh perintah CLUSTER NODES digunakan untuk menyegarkan topologi kluster. Jika parameter ini disetel ke false, titik akhir node tertentu digunakan. | Kami sarankan Anda menyetel parameter ini ke false kecuali diperlukan lain. Jika Anda mengaktifkan opsi ini, perintah CLUSTER NODES dikirim ke semua node, yang meningkatkan beban pada server. Selain itu, selama perubahan konfigurasi, menggunakan titik akhir untuk memperbarui topologi biasanya lebih cepat dan lebih andal. |
enableAllAdaptiveRefreshTriggers() | Dinonaktifkan | Mengaktifkan penyegaran otomatis topologi kluster setelah menerima pesan MOVED. | Parameter ini harus diaktifkan. Mengaktifkan opsi ini memastikan bahwa Lettuce dapat segera memperbarui topologi lokal setelah perubahan topologi. |
adaptiveRefreshTriggersTimeout(Duration timeout) | 30s | Membatasi frekuensi penyegaran topologi kluster untuk hanya mengizinkan satu penyegaran dalam periode timeout yang ditentukan. | Kami sarankan Anda menyetel parameter ini ke 15s. Perubahan topologi di beberapa node dalam kluster bukanlah atomik. Akibatnya, penyegaran topologi pertama yang dipicu oleh Lettuce mungkin gagal. Penyegaran cepat berikutnya membantu memastikan bahwa topologi diperbarui dengan benar. Saat jumlah aplikasi kecil, lebih sedikit klien mengirim perintah CLUSTER NODES pada saat yang sama. Dalam kasus ini, Anda dapat mengurangi nilai ini secara tepat untuk mencapai konvergensi tabel topologi yang lebih cepat. |
validateClusterNodeMembership(boolean validateClusterNodeMembership) | true | Selama perubahan topologi, Lettuce menggunakan MOVED untuk mengarahkan ulang perintah ke node yang benar. Setelah parameter ini disetel ke true, perintah hanya dapat dialihkan ke node yang secara eksplisit terdaftar dalam output perintah CLUSTER NODES. | Parameter ini harus disetel ke false. Menyetel parameter ini ke false memungkinkan akses ke node baru yang ditambahkan sebelum penyegaran topologi lokal selesai setelah perubahan topologi kluster. |
Referensi
Mode koneksi langsung cocok untuk skenario aplikasi sederhana. Mode proxy memberikan skalabilitas dan ketersediaan tinggi yang lebih besar. Untuk informasi lebih lanjut, lihat Fitur Node Proxy.
FAQ
Mengapa kesalahan
MOVED 4578 172.18.xx.xxx:6379dikembalikan?Kesalahan
MOVED <slot> <IP:Port>menunjukkan bahwa kunci yang diminta berada di node lain dalam instans. Dalam banyak kasus, kesalahan ini terjadi saat menggunakan klien yang tidak mendukung Redis Cluster. Misalnya, kesalahan ini mungkin terjadi dalam skenario berikut, yang juga berlaku untuk klien lain:Anda terhubung ke instans menggunakan redis-cli tanpa opsi
-c.Anda menggunakan klien
redis-pystandar dalam Python, yang tidak mendukung pengalihan otomatis. Dalam hal ini, gunakan klien redis-cluster.
Untuk informasi tentang kesalahan lainnya, lihat Kesalahan Umum dan Pemecahan Masalah.