Daftar error umum dan solusinya untuk Tair (Redis-compatible).
Ikhtisar error
|
Kategori |
Item error |
|
Exception Redis umum |
|
|
redis-cli |
|
|
Exception umum modus proxy |
|
|
Skrip Lua dan transaksi |
|
|
Klien Jedis |
|
|
Klien Lettuce |
|
|
Klien Redisson |
|
|
Klien Spring Data Redis |
|
|
Klien StackExchange.Redis |
|
|
Klien Predis |
|
|
Klien phpredis |
|
|
Klien Go-redis |
|
|
Klien node-redis |
Exception Redis umum
ERR illegal address
Penyebab: Alamat IP klien Anda tidak ditambahkan ke daftar putih instans Tair.
Solusi: Tambahkan alamat IP klien Anda ke daftar putih instans Tair. Untuk informasi selengkapnya, lihat Lakukan diagnostik pada koneksi.
ERR Sentinel compatibility mode is disabled
Penyebab: Mode kompatibel Sentinel tidak diaktifkan untuk instans Tair.
Solusi: Aktifkan mode kompatibel Sentinel untuk instans di Konsol. Untuk informasi selengkapnya, lihat Aktifkan mode kompatibel Sentinel.
ERR max number of clients reached
Penyebab: Jumlah maksimum koneksi ke instans Tair telah tercapai.
Solusi:
Periksa apakah terjadi kebocoran koneksi pada klien. Misalnya, pastikan fungsi
closedipanggil setelah penggunaan JedisPool pada klien Jedis.Periksa apakah sesi koneksi saat ini berjalan sebagaimana mestinya. Untuk informasi selengkapnya, lihat Kelola sesi instans. Anda dapat menghentikan sesi atau meningkatkan konfigurasi instans untuk menambah jumlah maksimum koneksi ke instans.
NOAUTH
Penyebab: Autentikasi berbasis kata sandi dikonfigurasi untuk instans Tair, tetapi klien tidak menyediakan kata sandi atau menyediakan kata sandi yang salah.
Solusi: Gunakan username dan kata sandi yang benar. Metode login untuk instans.
Jika Anda menggunakan versi klien Lettuce 6.4.0.RELEASE hingga 6.4.1.RELEASE, error ini dapat terjadi meskipun Anda memberikan kata sandi yang benar. Masalah ini muncul ketika Lettuce menambahkan dukungan untuk CLIENT SETINFO dan telah diperbaiki di versi 6.4.2.RELEASE. redis/lettuce#3035.
Jika mengalami masalah ini, Anda dapat secara manual mengalihkan protokol ke RESP2 atau meningkatkan klien ke Lettuce 6.4.2.RELEASE atau yang lebih baru. Jika menggunakan Spring Data Redis, tingkatkan ke versi 3.4.2 atau yang lebih baru.
WRONGPASS invalid username-password pair
Penyebab: Kata sandi tidak valid.
Solusi: Gunakan username dan kata sandi akun yang benar untuk menghubungkan ke instans. Untuk informasi selengkapnya, lihat Hubungkan ke instans.
Jika mode kompatibel Sentinel diaktifkan untuk instans, rujuk topik Gunakan mode kompatibel Sentinel untuk menghubungkan ke instans.
ERR invalid password
Penyebab: Kata sandi tidak valid.
Solusi: Gunakan username dan kata sandi akun yang benar untuk menghubungkan ke instans. Untuk informasi selengkapnya, lihat Hubungkan ke instans.
Jika error ini dilaporkan di Data Management (DMS), kemungkinan penyebabnya adalah kata sandi yang disimpan oleh DMS saat login terakhir tidak cocok dengan kata sandi saat ini untuk instans tersebut. Di daftar instance list DMS, temukan instans tersebut dan pilih More > Edit di kolom Actions. Kemudian, masukkan kata sandi baru di bidang Database Password dan coba lagi.
Connection reset by peer
Penyebab: Koneksi ditutup karena exception pada buffer klien.
Solusi: Periksa kode aplikasi atau sesuaikan ukuran buffer klien. Lihat bagian Unexpected end of stream.
UnknownHostException
Atau, error failed to connect: xxx.redis.rds.aliyuncs.com could not be resolved terjadi.
Penyebab: Klien tidak dapat melakukan resolusi nama domain instans Tair.
Solusi: Konfigurasikan server DNS dengan benar. Untuk informasi selengkapnya, lihat Bagaimana cara memecahkan masalah koneksi yang disebabkan oleh kegagalan resolusi DNS?
OOM: Used memory > 'maxmemory'
Penyebab: Memori maksimum yang dikonfigurasi untuk instans Tair telah tercapai.
Jika instans Tair menggunakan arsitektur kluster, penggunaan memori dari sebuah shard data mungkin melebihi memori maksimum yang dikonfigurasi untuk shard data tersebut.
Solusi:
Jika penggunaan memori instans mencapai 100%, kami menyarankan agar Anda meningkatkan konfigurasi instans. Untuk informasi selengkapnya, lihat Ubah konfigurasi instans.
Jika penggunaan memori satu shard data mencapai 100%, kemungkinan terdapat large key dalam instans. Anda dapat menggunakan fitur analisis key offline atau diagnostik instans untuk mengidentifikasi penyebabnya.
WRONGTYPE: Tipe data salah
Penyebab: Perintah tidak sesuai dengan tipe data kunci, seperti menjalankan perintah HASH pada kunci String.
Solusi: Perbaiki kode atau perintah yang salah. Redis Commands.
ERR unknown command 'xxx'
Penyebab: Instans tidak mendukung perintah ini.
Error ERR unknown command 'WAIT' menunjukkan bahwa perintah WAIT tidak didukung dalam mode proxy untuk arsitektur kluster. Gunakan mode koneksi langsung.
Solusi: Verifikasi dukungan perintah untuk versi instans Anda. Dukungan dan batasan perintah Tair (Edisi Perusahaan), Dukungan dan batasan perintah untuk Redis Edisi Open-Source, dan Batasan perintah untuk instans yang menggunakan arsitektur kluster atau pemisahan baca/tulis.
Tingkatkan ke versi minor terbaru untuk fitur baru dan stabilitas yang lebih baik. Tingkatkan versi minor dan versi proxy.
Command 'xxx' not supported
Penyebab: Perintah tertentu dari Tair dinonaktifkan di Alibaba Cloud, atau perintah-perintah ini ditentukan oleh #no_loose_disabled-commands. Untuk informasi selengkapnya, lihat Perintah yang didukung oleh Redis Edisi Open-Source dan Nonaktifkan perintah berisiko tinggi.
Solusi: Hapus perintah yang ingin Anda jalankan dari daftar perintah yang dinonaktifkan yang ditentukan oleh #no_loose_disabled-commands.
NOPERM this user has no permissions to run the 'xxx'
Penyebab: Perintah tertentu dari Tair dinonaktifkan di Alibaba Cloud, atau perintah-perintah ini ditentukan oleh #no_loose_disabled-commands. Untuk informasi selengkapnya, lihat Perintah yang didukung oleh Redis Edisi Open-Source dan Nonaktifkan perintah berisiko tinggi.
Solusi: Hapus perintah yang ingin Anda jalankan dari daftar perintah yang dinonaktifkan yang ditentukan oleh #no_loose_disabled-commands.
ERR FLUSHDB is not allowed in migrating mode
Penyebab: Saat jumlah shard data sedang berubah untuk instans kluster Tair cloud-native, perintah FLUSHDB dan FLUSHALL dinonaktifkan.
Solusi: Tunggu hingga perubahan selesai untuk instans kluster Tair cloud-native. Untuk informasi selengkapnya, lihat Sesuaikan jumlah shard untuk instans.
CROSSSLOT: Kunci tidak berada dalam slot yang sama
Penyebab: Perintah yang melibatkan beberapa kunci lintas slot, seperti DEL, MSET, dan MGET, tidak didukung untuk instans kluster Tair dalam mode koneksi langsung.
Solusi:
Sebelum menjalankan perintah yang melibatkan beberapa kunci, gunakan perintah CLUSTER KEYSLOT untuk memastikan bahwa semua kunci berada dalam slot yang sama.
Ubah nama kunci dan terapkan hash tags untuk memastikan kunci yang terlibat dialokasikan dalam slot yang sama. Namun, penting untuk mencegah kesenjangan data saat menggunakan hash tags.
Ubah instans menjadi instans kluster dalam mode proxy yang mendukung perintah yang melibatkan beberapa kunci lintas slot, seperti DEL, MGET, dan MSET. Untuk informasi selengkapnya, lihat Fitur node proxy.
Error instans read-only
Penyebab: Selama proses alih bencana master-replika, perubahan konfigurasi, atau pembaruan versi minor untuk instans Tair, terjadi koneksi sementara dan instans tetap read-only hingga 30 detik.
Solusi: Tunggu hingga instans pulih. Tidak diperlukan operasi manual. Rancang mekanisme penanganan ulang koneksi dan exception untuk aplikasi Anda. Untuk informasi selengkapnya, lihat Ubah konfigurasi instans.
Failed to connect to any host resolved for DNS name
Penyebab: Konfigurasi daftar putih salah.
Solusi: Tambahkan alamat IP klien ke daftar putih. Konfigurasikan Daftar Putih IP.
Jika Anda terhubung melalui jaringan publik, tambahkan alamat IP egress Anda ke daftar putih. Temukan alamat IP egress Anda di https://cip.cc/.
Exception redis-cli
Connection reset by peer
Penyebab: Instans arsitektur standar telah mengaktifkan TLS/SSL, tetapi Anda terhubung tanpa sertifikat.
Solusi:
-
Terhubung dengan sertifikat. Hubungkan ke instans melalui koneksi terenkripsi TLS/SSL.
-
Jika Anda tidak perlu menggunakan enkripsi TLS/SSL, nonaktifkan enkripsi TLS dan coba lagi.
ERR must use ssl connection in ssl port
Penyebab: Instans arsitektur kluster telah mengaktifkan TLS/SSL, tetapi Anda terhubung tanpa sertifikat.
Solusi:
-
Terhubung dengan sertifikat. Hubungkan ke instans melalui koneksi terenkripsi TLS/SSL.
-
Jika Anda tidak perlu menggunakan enkripsi TLS/SSL, nonaktifkan enkripsi TLS dan coba lagi.
Exception proxy umum
ERR client IP is not in whitelist
Penyebab: Alamat IP klien Anda tidak ditambahkan ke daftar putih instans Tair.
Solusi: Tambahkan alamat IP klien Anda ke daftar putih instans Tair. Untuk informasi selengkapnya, lihat Lakukan diagnostik pada koneksi.
NOWRITE: Tidak dapat menulis ke instans read-only
Atau, error NOREAD You can't read against a non-read redis terjadi.
Penyebab: Instans Anda memiliki pembayaran tertunda atau telah kedaluwarsa. Instans berada dalam status Locked.
Solusi: Tambahkan dana ke akun Anda atau perpanjang instans. Untuk informasi selengkapnya, lihat Kedaluwarsa dan pembayaran tertunda.
ERR syntax error
Penyebab: Sintaks perintah salah, seperti meneruskan tiga parameter padahal empat diperlukan.
Solusi: Periksa sintaks perintah. Redis Commands.
ERR no such db node
Penyebab: Saat menjalankan perintah internal Tair, parameter db node yang ditentukan tidak valid.
Solusi: Tentukan parameter db node dengan benar. Nilai db node harus kurang dari jumlah shard data dalam instans. Untuk informasi selengkapnya, lihat Perintah internal untuk instans dalam mode proxy.
ERR 'xxx' command keys must in same slot
Penyebab: Transaksi atau skrip mengakses kunci dari slot yang berbeda dalam instans kluster Tair.
Solusi: Modifikasi transaksi atau skrip tersebut. Anda dapat menggunakan perintah CLUSTER KEYSLOT untuk menanyakan slot tempat kunci yang diminta disimpan.
Instans kluster Tair menggunakan algoritma Cyclic Redundancy Check (CRC) untuk mendistribusikan kunci secara merata di berbagai slot. Jika Anda ingin menyimpan kunci dalam slot yang sama, Anda dapat menggunakan hash tags. Namun, hal ini dapat menyebabkan kesenjangan data. Lakukan dengan hati-hati.
EVAL/EVALSHA: Jumlah kunci harus positif
Penyebab: Tidak ada kunci yang ditentukan atau parameter numkeys diatur ke nilai kurang dari atau sama dengan 0 untuk perintah EVAL dan EVALSHA.
Solusi: Saat menggunakan perintah EVAL dan EVALSHA, Anda harus menentukan setidaknya satu kunci dan mengatur parameter numkeys ke nilai lebih dari 0. Untuk informasi selengkapnya, lihat Penggunaan skrip Lua.
Terlalu banyak permintaan tertunda
Penyebab: Permintaan tertunda menumpuk di backend Tair karena klien menggunakan pipeline yang tidak valid.
Solusi: Kurangi jumlah permintaan yang dipipeline.
ERR redis temporary failure
Penyebab: Saat Anda terhubung ke node instans Tair, terjadi error timeout karena fluktuasi jaringan, koneksi berlebihan, alih bencana master-replika, atau kueri lambat yang sedang berlangsung.
Solusi: Tunggu hingga instans pulih. Tidak diperlukan operasi manual. Rancang mekanisme penanganan ulang koneksi dan exception untuk aplikasi Anda.
ERR redis temporary failure (ErrorCode 7002)
Penyebab: Saat Anda terhubung ke node instans Tair, terjadi error timeout karena perubahan konfigurasi instans atau alih bencana master-replika yang sedang berlangsung.
Solusi: Tunggu hingga instans pulih. Tidak diperlukan operasi manual. Rancang mekanisme penanganan ulang koneksi dan exception untuk aplikasi Anda.
Skrip Lua dan transaksi
NOSCRIPT: Tidak ada skrip yang cocok
Penyebab: Saat menjalankan perintah EVALSHA, skrip yang sesuai dengan nilai SHA1 tidak di-cache ke instans Tair.
Solusi: Jalankan perintah EVAL atau SCRIPT LOAD untuk meng-cache skrip yang diperlukan ke instans Tair dan coba lagi. Untuk informasi selengkapnya, lihat Tangani error NOSCRIPT.
BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.
Penyebab: Skrip Lua mengalami timeout.
Solusi: Jalankan perintah SCRIPT KILL untuk menghentikan eksekusi skrip atau tunggu hingga eksekusi selesai. Untuk informasi selengkapnya, lihat Tangani timeout skrip Lua.
EVAL command not supported
Penyebab: Perintah terkait EVAL tidak dapat dijalankan.
Solusi: Perbarui instans Anda ke versi minor terbaru. Untuk informasi selengkapnya, lihat Perbarui versi minor instans.
Kunci untuk eval/evalsha harus berada dalam slot yang sama
Solusi: Modifikasi skrip Lua. Anda dapat menanyakan slot tempat kunci berada dengan menjalankan perintah CLUSTER KEYSLOT. Untuk informasi selengkapnya, lihat Batasan skrip Lua dalam instans kluster.
ERR bad Lua script for Redis cluster
Penyebab: Error ini dapat disebabkan oleh batasan node proxy pada skrip Lua.
Solusi: Tentukan semua kunci dalam array. Contoh: EVAL "return redis.call('mget', KEYS[1], KEYS[2])" 2 foo {foo}bar. Kunci tidak dapat diganti dengan variabel Lua. Untuk informasi selengkapnya, lihat Batasan skrip Lua dalam instans kluster.
EXECABORT: Transaksi dibatalkan
Penyebab: Perintah yang Anda jalankan dalam transaksi memiliki kesalahan sintaks atau kesalahan lainnya.
Solusi: Periksa logika kode Anda dan perbaiki kesalahan sintaks perintah tersebut.
Skrip tidak dapat dihentikan karena melibatkan perintah tulis
Penyebab: Operasi tulis yang terlibat dalam skrip Lua saat ini telah dilakukan. Dalam kasus ini, perintah SCRIPT KILL tidak dapat dijalankan.
Solusi: Temukan instans di konsol dan klik restart di kolom Actions. Untuk informasi selengkapnya, lihat Restart instans.
UNKILLABLE: Tidak dapat menghentikan skrip yang direplikasi
Penyebab: Skrip Lua saat ini diteruskan oleh node master ke node replika yang sesuai. Dalam kasus ini, perintah SCRIPT KILL tidak dapat dijalankan.
Solusi: Temukan instans di konsol dan klik restart di kolom Actions. Untuk informasi selengkapnya, lihat Restart instans.
NOTBUSY
Penyebab: Tidak ada skrip Lua yang sedang dieksekusi.
Solusi: Tidak diperlukan operasi manual. Jangan menjalankan perintah SCRIPT KILL.
Klien Jedis
Kegagalan memperoleh resource pool
Penyebab: Koneksi Jedis tidak dapat dipinjam dari JedisPool.
Saat parameter blockWhenExhausted diatur ke true (nilai default), klien menunggu selama waktu yang ditentukan oleh parameter maxWaitMillis jika tidak ada koneksi yang tersedia dari JedisPool. Jika klien tetap tidak dapat memperoleh koneksi setelah menunggu, exception berikut dilemparkan:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool ... Caused by: java.util.NoSuchElementException: Timeout waiting for idle object at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)Saat parameter blockWhenExhausted diatur ke false, exception berikut dilemparkan jika tidak ada koneksi yang tersedia dari JedisPool:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool ... Caused by: java.util.NoSuchElementException: Timeout waiting for idle object at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)
Solusi: Pertimbangkan aspek-aspek berikut untuk memecahkan masalah error ini:
Kebocoran koneksi
Secara default, maxTotal diatur ke 8. Kode berikut menunjukkan bahwa klien Jedis meminjam koneksi dari JedisPool sebanyak delapan kali tetapi tidak mengembalikannya. Akibatnya, klien Jedis tidak dapat menjalankan perintah
jedisPool.getResource().ping()pada percobaan kesembilan untuk memperoleh koneksi lain dari JedisPool.GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379); // Klien meminjam koneksi dari JedisPool sebanyak delapan kali, tetapi tidak mengembalikan koneksi-koneksi tersebut. for (int i = 0; i < 8; i++) { Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.ping(); } catch (Exception e) { logger.error(e.getMessage(), e); } } jedisPool.getResource().ping();Kode yang direkomendasikan:
Jedis jedis = null; try { jedis = jedisPool.getResource(); // Perintah yang ingin Anda jalankan. jedis.executeCommand() } catch (Exception e) { // Jika perintah melibatkan kunci, kami menyarankan agar Anda membuat konfigurasi untuk menampilkan kunci dalam log error. Dengan cara ini, Anda dapat menggunakan kunci untuk mengidentifikasi shard data tempat masalah terjadi. logger.error(e.getMessage(), e); } finally { // Klien tidak menutup koneksi yang dipinjam. Sebaliknya, klien mengembalikan koneksi ke JedisPool. if (jedis != null) jedis.close(); }Nilai kecil untuk parameter maxTotal
Saat sistem memiliki banyak operasi konkuren, nilai kecil untuk parameter maxTotal dapat menyebabkan exception. Misalnya, rata-rata waktu eksekusi perintah sekitar 1 ms, yang dihitung menggunakan rumus:
Waktu yang dikonsumsi untuk meminjam atau mengembalikan resource+ Waktu eksekusi perintah oleh Jedis + Latensi jaringan. Jumlah permintaan per detik (QPS) dari satu koneksi sekitar 1.000, dan total QPS yang diharapkan adalah 50.000. Secara teori, Anda memerlukan nilai maxTotal sebesar 50 untuk mencapai QPS yang diharapkan sebesar 50.000 (50.000 ÷ 1.000).Dalam kasus ini, Anda dapat menjalankan perintah berikut pada klien untuk memperoleh jumlah koneksi klien, lalu menyesuaikan nilai maxTotal berdasarkan hasil tersebut.
netstat -an | grep 6379 | grep EST | wc -lPemblokiran koneksi
Saat koneksi ke instans Tair diblokir karena kueri lambat, semua koneksi menunggu dalam periode timeout yang ditentukan. Dalam kondisi beban konkuren tinggi, error timeout dapat dilaporkan. Untuk informasi selengkapnya, lihat java.net.SocketTimeoutException: connect timed out.
Koneksi ditolak
Saat Anda mencoba memperoleh koneksi dari JedisPool dan tidak ada koneksi yang tersedia, Jedis mencoba membuat koneksi baru. Namun, upaya koneksi ditolak dan exception dilemparkan. Contoh:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:50) at redis.clients.jedis.JedisPool.getResource(JedisPool.java:99) at TestAdmin.main(TestAdmin.java:14) Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused at redis.clients.jedis.Connection.connect(Connection.java:164) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:80) at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1676) at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:87) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) at redis.clients.util.Pool.getResource(Pool.java:48) ... 2 more Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at redis.clients.jedis.Connection.connect(Connection.java:158) ... 9 moreat redis.clients.jedis.Connection.connect(Connection.java:158)menunjukkan bahwa Jedis mencoba membuat koneksi socket dan memanggil fungsiconnect, tetapi upaya koneksi ditolak. Kode sumber Jedis:socket.setSoLinger(true, 0); 158: socket.connect(new InetSocketAddress(host, port), connectionTimeout);Umumnya, untuk mengatasi masalah ini, Anda harus memverifikasi konfigurasi nama domain instans Tair dan memeriksa koneksi jaringan dalam periode waktu yang sesuai.
java.net.SocketTimeoutException: connect timed out
Penyebab: Koneksi antara klien Anda dan instans Tair mengalami timeout.
Solusi: Rujuk topik Bagaimana cara memecahkan masalah koneksi di Tair?.
java.net.SocketTimeoutException: Read timed out
Penyebab: Panggilan API Jedis mengalami timeout karena koneksi jaringan tidak stabil, periode timeout baca/tulis yang singkat, kueri lambat, atau pemblokiran koneksi.
Solusi: Tingkatkan periode timeout atau lakukan diagnostik instans untuk memeriksa apakah terjadi masalah kinerja atau exception pada waktu yang sesuai.
Jika error ini terjadi di DMS, endpoint VPC atau port mungkin telah berubah. Di konsol DMS, klik kanan instans di daftar database instance dan pilih Edit Instance. Atur Entry Method ke Connection String Address, masukkan endpoint yang diperbarui di Connection String Address, dan coba lagi.
No reachable node in cluster
Penyebab: JedisCluster tidak dapat diakses.
Solusi: Saat pertama kali klien Anda terhubung ke instans Tair, periksa apakah alamat IP klien telah ditambahkan ke daftar putih instans Tair. Jika ini bukan pertama kalinya Anda terhubung ke instans Tair, lakukan diagnostik instans untuk mengidentifikasi penyebabnya.
Caused by: java.lang.NumberFormatException: For input string: "6379@13028"
Penyebab: ClusterNodeInformationParser diperkenalkan di Jedis 2.8.0 dan versi sebelumnya untuk menguraikan output dari cluster slots. Namun, Redis open source telah mengubah format output tersebut, sehingga error NumberFormatException dilaporkan.
Solusi: Perbarui klien Jedis Anda ke versi 2.9.0 atau yang lebih baru.
No more cluster attempts left
Penyebab: Panggilan API mengalami timeout dan lima percobaan ulang juga gagal. Secara default, setelah panggilan API mengalami timeout, JedisCluster mencoba ulang lima kali.
Solusi: Tingkatkan periode timeout atau lakukan diagnostik instans.
Unexpected end of stream
Penyebab: Terjadi exception pada buffer klien Jedis. Pertimbangkan aspek-aspek berikut untuk memecahkan masalah ini:
Beberapa thread berbagi satu koneksi
Umumnya, satu thread menggunakan satu koneksi Jedis. Kode berikut menunjukkan bahwa dua thread berbagi satu koneksi Jedis:
new Thread(new Runnable() { public void run() { for (int i = 0; i < 100; i++) { jedis.get("hello"); } } }).start(); new Thread(new Runnable() { public void run() { for (int i = 0; i < 100; i++) { jedis.hget("haskey", "f"); } } }).start();Untuk mencegah masalah ini dan memastikan keamanan thread, gunakan JedisPool untuk mengelola koneksi Jedis.
Koneksi idle dalam waktu lama
Server menutup koneksi idle dalam waktu lama. Periksa pengaturan timeout instans dan pengaturan terkait JedisPool untuk menentukan apakah perlu memeriksa dan membersihkan koneksi idle secara berkala.
CatatanSecara default, Tair tidak menutup koneksi idle dalam waktu lama. Jika Anda mengubah nilai parameter timeout, error ini dapat dilaporkan. Untuk informasi selengkapnya, lihat Tentukan periode timeout untuk koneksi klien idle.
Solusi: Periksa apakah beberapa thread berbagi koneksi Jedis atau apakah server menutup koneksi idle dalam waktu lama.
java.lang.Long cannot be cast to java.util.List
Penyebab: Error ini dilaporkan jika koneksi Jedis yang sama dibagikan di antara beberapa thread. Hal ini terjadi karena Jedis tidak aman untuk thread dan tidak boleh digunakan secara konkuren di beberapa thread.
Solusi: Gunakan satu koneksi Jedis dalam satu thread. Untuk itu, Anda dapat menggunakan JedisPool.
Broken pipe (Write failed)
Penyebab: Setelah error timeout terjadi pada klien Jedis dalam mode koneksi tunggal dan klien menutup socket, Anda terus menulis data ke instans.
Solusi: Gunakan satu koneksi Jedis dalam satu thread. Untuk itu, Anda dapat menggunakan JedisPool.
Kunci berada dalam slot yang berbeda
Penyebab: JedisCluster melakukan operasi pada kunci yang berada dalam slot yang berbeda.
Solusi: Modifikasi kunci dengan menggunakan hash tags.
Anda juga dapat menggunakan mode proxy untuk menonaktifkan batasan arsitektur kluster.
Klien Lettuce
Connection to xxx not allowed. This partition is not known in the cluster view.
Penyebab: Secara default, validateClusterNodeMembership diatur ke true dan refreshOption diatur ke null untuk klien Lettuce. Setelah alamat routing instans Tair berubah, tabel rute tidak diperbarui karena refreshOption diatur ke null. Akibatnya, error dilaporkan untuk validateClusterNodeMembership.
Solusi: Tentukan parameter refreshOption dan atur parameter validateClusterNodeMembership ke false. Untuk informasi selengkapnya, lihat Lettuce.
io.lettuce.core.RedisConnectionException: Unable to connect xxx
Penyebab: Koneksi antara klien Anda dan instans Tair mengalami timeout.
Solusi: Rujuk topik Bagaimana cara memecahkan masalah koneksi di Tair?.
java.nio.channels.UnresolvedAddressException
Penyebab: Error ini kemungkinan besar disebabkan oleh versi Netty.
Solusi: Tingkatkan dependensi Netty Anda. spring-projects/spring-boot#14307.
ERR Unknown sentinel subcommand 'master'
Penyebab: Dalam mode Sentinel master-replika, klien Lettuce mengirim perintah Sentinel master/slave ke instans Tair. Namun, instans dalam mode kompatibel Sentinel hanya mendukung perintah Sentinel get-master-addr-by-name.
Solusi: Modifikasi kode Anda untuk beralih ke mode non-Sentinel. Tair menggunakan komponen ketersediaan tinggi internal. Anda tidak perlu menggunakan mode kompatibel Sentinel.
Error 'Unknown command' untuk protokol RESP3 yang tidak didukung
Penyebab: Redis 6.0 dan yang lebih baru mendukung protokol RESP3. Anda dapat menjalankan perintah HELLO untuk mengalihkan koneksi ke versi protokol RESP yang diinginkan. Namun, beberapa instans versi sebelumnya tidak mendukung perintah HELLO, menyebabkan masalah kompatibilitas.
Solusi: Konfigurasi program Anda untuk menggunakan protokol RESP2 saat mengakses instans Tair. Contoh:
client.setOptions(ClientOptions.builder()
.protocolVersion(ProtocolVersion.RESP2)
.build());Contoh saat Spring Data Redis dengan Lettuce digunakan sebagai klien Redis:
LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder().
clientOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build()).build();
return new LettuceConnectionFactory(redisClusterConfiguration, lettuceClientConfiguration);Klien Redisson
org.redisson.client.RedisConnectionException: Unable to connect to Redis server xxx
Penyebab: Koneksi antara klien Anda dan instans Tair mengalami timeout.
Solusi: Rujuk topik Bagaimana cara memecahkan masalah koneksi di Tair?.
No enum constant org.redisson.cluster.ClusterNodeInfo.Flag.NOFAILOVER
Penyebab: Bug yang dikenal di versi Redisson sebelumnya. redisson/redisson#2399.
Solusi: Perbarui klien Redisson Anda ke versi 3.11.6 atau yang lebih baru.
Klien Spring Data Redis
NOPERM this user has no permissions to run the 'config|get' command
Penyebab: Versi instans Anda ditampilkan sebagai Redis 7.0 di halaman Informasi Instans. Perintah CONFIG dinonaktifkan di instans Tair (Redis OSS-compatible) yang menjalankan Redis 7.0.
Saat startup, Spring Data Redis menjalankan perintah CONFIG SET untuk mengatur parameter notify-keyspace-events dan mengaktifkan KeyspaceEventMessageListener. Karena perintah CONFIG GET/SET dinonaktifkan, hal ini gagal dengan error startup.
Solusi: Atur keyspaceNotificationsConfigParameter ke string kosong. Contoh kode: SpringRedisTest.zip. Spring Data Redis.
@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP, keyspaceNotificationsConfigParameter = "")
Jika Anda menggunakan KeyExpirationListener, atur juga keyspaceNotificationsConfigParameter ke string kosong di konstruktor.
public RedisKeyExpirationListener(RedisMessageListenerContainer redisMessageListenerContainer) {
super(redisMessageListenerContainer);
setKeyspaceNotificationsConfigParameter(""); // Penting
}
Klien StackExchange.Redis
Multiple databases not supported
Penyebab: Perintah SELECT tidak didukung untuk instans kluster.
Solusi: Atur parameter cluster_compat_enable ke 0 untuk menonaktifkan kompatibilitas dengan sintaks Redis Cluster open source. Kemudian, restart klien Anda dan coba lagi. Untuk informasi selengkapnya, lihat Konfigurasikan parameter instans.
Klien Predis
Error while reading line from the server
Penyebab: Permintaan baca mengalami timeout. Mungkin sedang berlangsung kueri lambat.
Solusi: Tingkatkan periode timeout atau atur read_write_timeout ke 0 atau -1. Untuk informasi selengkapnya, lihat Pertanyaan Predis.
Klien phpredis
Cannot assign requested address
Penyebab: Klien terhubung ke instans Tair melalui koneksi singkat.
Solusi: Ubah metode koneksi dari connect ke pconnect, atau modifikasi parameter kernel tcp_max_tw_buckets pada instance ECS klien. Error "Cannot assign requested address".
redis protocol error, got ' ' as reply type byte
Penyebab: Bug di versi phpredis yang usang. phpredis/phpredis#1585.
Solusi: Tingkatkan phpredis ke versi terbaru.
php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
Solusi: Konfigurasikan server DNS dengan benar. Untuk informasi selengkapnya, lihat Bagaimana cara memecahkan masalah koneksi yang disebabkan oleh kegagalan resolusi DNS?.
Kemungkinan penyebab: Klien tidak dapat melakukan resolusi nama domain instans Tair.
Klien Go-redis
panic: got 4 elements in cluster info address, expected 2 or 3
Penyebab: Ketidakcocokan versi klien Go-redis dengan Redis 7.0 atau yang lebih baru. redis/go-redis#2085.
Solusi: Gunakan go-redis 9.0 atau yang lebih baru.
Klien Node-redis
Perintah SCAN berjalan tak hingga atau tidak mengembalikan data
Penyebab: Perintah SCAN dapat mengembalikan nilai kursor yang melebihi integer aman maksimum JavaScript, Number.MAX_SAFE_INTEGER. Hal ini menyebabkan kursor tidak akurat dan loop tak hingga. redis/node-redis#2561.
Solusi: Perbarui klien node-redis Anda ke versi 5.0.0 atau yang lebih baru.