Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Azure Cache for Redis mengumumkan garis waktu penghentiannya untuk semua SKU. Sebaiknya pindahkan instans Azure Cache for Redis yang ada ke Azure Managed Redis sesegera mungkin.
Untuk informasi lebih lanjut tentang pengakhiran layanan:
Coba lagi perintah
Konfigurasikan koneksi klien Anda untuk mencoba kembali perintah dengan backoff eksponensial. Untuk informasi selengkapnya, lihat panduan coba lagi.
Uji ketahanan
Uji ketahanan sistem Anda terhadap pemutusan koneksi menggunakan boot ulang untuk mensimulasikan patch. Untuk informasi selengkapnya tentang menguji performa Anda, lihat Pengujian performa.
Pengaturan TCP untuk aplikasi klien yang dihosting Linux
Pengaturan TCP default di beberapa versi Linux dapat menyebabkan koneksi server Redis gagal selama 13 menit atau lebih. Pengaturan default dapat mencegah aplikasi klien mendeteksi koneksi tertutup dan memulihkannya secara otomatis jika koneksi tidak ditutup dengan baik.
Kegagalan untuk membangun kembali koneksi dapat terjadi dalam situasi di mana koneksi jaringan terganggu atau server Redis offline untuk pemeliharaan yang tidak diencana.
Kami merekomendasikan pengaturan TCP ini:
| Setting | Nilai |
|---|---|
net.ipv4.tcp_retries2 |
5 |
Untuk informasi selengkapnya tentang skenario, lihat Koneksi tidak dibuat ulang selama 15 menit saat berjalan di Linux. Meskipun diskusi ini tentang pustaka StackExchange.Redis , pustaka klien lain yang berjalan di Linux juga terpengaruh. Penjelasannya masih berguna dan Anda dapat menggeneralisasi ke pustaka lain.
Menggunakan ForceReconnect dengan StackExchange.Redis
Dalam kasus yang jarang terjadi, StackExchange.Redis gagal terhubung kembali setelah koneksi terputus. Dalam kasus ini, menghidupkan ulang klien atau membuat ConnectionMultiplexer baru memperbaiki masalah. Sebaiknya gunakan pola singleton ConnectionMultiplexer sambil memungkinkan aplikasi memaksa koneksi ulang secara berkala. Lihat proyek sampel mulai cepat yang paling cocok dengan kerangka kerja dan platform yang digunakan aplikasi Anda. Anda dapat melihat contoh pola kode ini di mulai cepat kami.
Pengguna ConnectionMultiplexer harus menangani kesalahan apa pun ObjectDisposedException yang mungkin terjadi akibat memusnahkan yang lama.
Panggil ForceReconnectAsync() untuk RedisConnectionExceptions dan RedisSocketExceptions. Anda juga dapat memanggil ForceReconnectAsync() untuk RedisTimeoutExceptions, tetapi hanya jika Anda menggunakan ReconnectMinInterval dan ReconnectErrorThreshold yang memadai. Jika tidak, membuat koneksi baru dapat menyebabkan kegagalan kaskade pada server yang kehabisan waktu karena sudah kelebihan beban.
Dalam aplikasi ASP.NET, Anda dapat menggunakan implementasi terintegrasi dalam paket Microsoft.Extensions.Caching.StackExchangeRedis alih-alih menggunakan paket StackExchange.Redis secara langsung. Jika Anda menggunakan Microsoft.Extensions.Caching.StackExchangeRedis dalam aplikasi ASP.NET daripada menggunakan StackExchange.Redis secara langsung, Anda dapat mengatur UseForceReconnect properti ke true:
Microsoft.AspNetCore.Caching.StackExchangeRedis.UseForceReconnect = true
Mengonfigurasi batas waktu yang sesuai
Dua nilai batas waktu penting untuk dipertimbangkan dalam ketahanan koneksi: batas waktu koneksi dan batas waktu perintah.
Waktu habis sambungan
connect timeout Adalah saat klien Anda menunggu untuk membuat koneksi dengan server Redis. Konfigurasikan pustaka klien Anda untuk menggunakan batas waktu connect timeout lima detik, memberikan sistem waktu yang cukup untuk terhubung bahkan dalam beban CPU yang lebih tinggi.
Nilai kecil connection timeout tidak menjamin koneksi dibuat dalam jangka waktu tersebut. Jika terjadi kesalahan (CPU klien tinggi, CPU server tinggi, dan sebagainya), maka nilai pendek connection timeout menyebabkan upaya koneksi gagal. Perilaku ini sering membuat situasi buruk lebih buruk. Alih-alih membantu, batas waktu yang lebih singkat memperburuk masalah dengan memaksa sistem untuk memulai ulang proses mencoba menyambungkan kembali, yang dapat menyebabkan perulangan sambungkan -> gagal -> coba lagi .
Batas waktu perintah
Sebagian besar pustaka klien memiliki konfigurasi batas waktu lain untuk command timeouts, yang merupakan waktu klien menunggu respons dari server Redis. Meskipun kami merekomendasikan pengaturan awal kurang dari lima detik, pertimbangkan untuk mengatur command timeout yang lebih tinggi atau lebih rendah tergantung pada skenario Anda dan ukuran nilai yang disimpan di cache Anda.
command timeout Jika terlalu kecil, koneksi dapat terlihat tidak stabil. Namun, jika command timeout terlalu besar, aplikasi Anda mungkin harus menunggu lama untuk mengetahui apakah perintah akan kehabisan waktu atau tidak.
Hindari lonjakan koneksi klien
Hindari membuat banyak koneksi secara bersamaan saat menyambungkan kembali setelah koneksi hilang. Mirip dengan cara batas waktu koneksi yang singkat dapat mengakibatkan pemadaman yang lebih lama, memulai banyak upaya koneksi ulang pada saat yang sama juga dapat meningkatkan beban server dan memperpanjang berapa lama waktu yang diperlukan agar semua klien berhasil terhubung kembali.
Jika Anda menyambungkan kembali banyak instans klien, pertimbangkan untuk mengatur jarak waktu koneksi baru untuk menghindari peningkatan tajam dalam jumlah klien yang terhubung.
Nota
Saat Anda menggunakan pustaka klien StackExchange.Redis , atur abortConnect ke false dalam string koneksi Anda. Sebaiknya biarkan ConnectionMultiplexer menangani sambungan ulang. Untuk informasi selengkapnya, lihat Praktik terbaik StackExchange.Redis.
Hindari koneksi yang tersisa
Cache memiliki batasan jumlah koneksi klien per tingkat cache. Pastikan bahwa ketika aplikasi klien Anda membuat ulang koneksi, koneksi lama ditutup dan dihapus.
Pemberitahuan pemeliharaan lanjutan
Gunakan pemberitahuan untuk mempelajari pemeliharaan mendatang. Untuk informasi selengkapnya, lihat Dapatkah saya diberi tahu sebelum pemeliharaan terencana.
Jadwalkan jendela pemeliharaan
Sesuaikan pengaturan cache Anda untuk mengakomodasi pemeliharaan. Untuk informasi selengkapnya tentang membuat jendela pemeliharaan untuk mengurangi efek negatif pada cache Anda, lihat Memperbarui saluran dan Menjadwalkan pembaruan.
Pola desain lainnya untuk ketahanan
Terapkan pola desain untuk ketahanan. Untuk informasi selengkapnya, lihat Bagaimana cara membuat aplikasi saya tangguh.
Batas waktu jeda
Azure Cache for Redis memiliki batas waktu 10 menit untuk koneksi diam. Batas waktu 10 menit memungkinkan server untuk secara otomatis membersihkan koneksi bocor atau koneksi yang ditinggalkan oleh aplikasi klien. Sebagian besar pustaka klien Redis memiliki kemampuan bawaan untuk mengirim heartbeat atau keepalive perintah secara berkala untuk mencegah koneksi ditutup meskipun tidak ada permintaan dari aplikasi klien.
Jika ada risiko koneksi Anda diam selama 10 menit, konfigurasikan keepalive interval ke nilai kurang dari 10 menit. Jika aplikasi Anda menggunakan pustaka klien yang tidak memiliki dukungan asli untuk keepalive fungsionalitas, Anda dapat menerapkannya di aplikasi Anda dengan mengirim PING perintah secara berkala.