Memecahkan masalah kehilangan data di Azure Cache for Redis

Artikel ini membahas cara mendiagnosis kehilangan data aktual atau yang diketahui yang mungkin terjadi di Azure Cache for Redis.

Catatan

Beberapa langkah pemecahan masalah dalam panduan ini termasuk petunjuk untuk menjalankan perintah Redis dan memantau beragam metrik kinerja. Untuk informasi dan petunjuk selengkapnya, lihat artikel di bagian Informasi tambahan.

Kehilangan sebagian kunci

Azure Cache for Redis tidak menghapus kunci secara acak setelah kunci tersebut disimpan di memori. Namun, itu menghapus kunci sebagai respons terhadap kebijakan kedaluwarsa, kebijakan penggusuran, dan perintah penghapusan kunci yang eksplisit. Anda dapat menjalankan perintah ini di konsol atau melalui CLI.

Kunci yang telah ditulis ke node utama dalam instans Azure Cache for Redis Premium atau Standar juga mungkin tidak langsung tersedia di replika. Data direplikasi dari node utama ke replika secara asinkron dan tanpa pemblokiran.

Jika Anda menemukan kunci yang hilang dari cache, periksa kemungkinan penyebabnya berikut:

Penyebab Deskripsi
Masa berlaku kunci Kunci dihapus karena batas waktu yang ditetapkan.
Pengeluaran kunci Kunci dihapus karena tekanan memori.
Penghapusan kunci Kunci dihapus dengan perintah hapus eksplisit.
Replikasi asinkron Kunci tidak tersedia pada replika karena penundaan replikasi data.

Masa berlaku kunci

Azure Cache for Redis menghapus kunci secara otomatis jika kunci ditetapkan batas waktu dan periode tersebut telah berlalu. Untuk informasi selengkapnya tentang masa berlaku kunci Redis, lihat dokumentasi perintah EXPIRE. Nilai batas waktu juga dapat diatur dengan menggunakan perintah SET, SETEX, GETSET, dan *STORE lainnya.

Untuk mendapatkan statistik mengenai jumlah kunci yang habis masa berlakunya, gunakan perintah INFO. Bagian Stats menunjukkan jumlah total kunci yang habis masa berlakunya. Bagian Keyspace menyediakan informasi selengkapnya tentang jumlah kunci dengan batas waktu dan rata-rata nilai batas waktu.


# Stats

expired_keys:46583

# Keyspace

db0:keys=3450,expires=2,avg_ttl=91861015336

Anda juga dapat melihatnya di metrik diagnostik untuk cache, untuk mengetahui apakah terdapat kolerasi antara saat kunci hilang dan lonjakan kunci yang habis masa berlakunya. Lihat Lampiran Men-debug Redis Keyspace Misses untuk informasi tentang menggunakan keyspace pemberitahuan atau MONITOR untuk men-debug jenis masalah ini.

Pengeluaran kunci

Azure Cache for Redis memerlukan ruang memori untuk menyimpan data. Hal ini menghapus menyeluruh kunci untuk mengosongkan memori yang tersedia jika diperlukan. Jika nilai used_memory atau used_memory_rss dalam perintah INFO mendekati pengaturan maxmemory yang dikonfigurasi, Azure Cache for Redis mulai mengeluarkan kunci dari memori berdasarkan kebijakan cache.

Anda dapat memantau jumlah kunci yang dikeluarkan dengan menggunakan perintah INFO:

# Stats

evicted_keys:13224

Anda juga dapat melihat metrik diagnostik untuk cache Anda, untuk melihat apakah ada korelasi antara saat kunci hilang dan lonjakan kunci yang dikeluarkan. Lihat Lampiran Debugging Redis Keyspace Misses untuk mengetahui informasi tentang cara menggunakan pemberitahuan keyspace atau MONITOR untuk men-debug jenis masalah ini.

Penghapusan kunci

Klien Redis dapat mengeluarkan perintah DEL atau HDEL untuk menghapus secara eksplisit dari Azure Cache for Redis. Anda dapat melacak jumlah operasi penghapusan dengan menggunakan perintah INFO. Jika perintah DEL atau HDEL telah dipanggil, jumlah tersebut akan tercantum di bagian Commandstats.

# Commandstats

cmdstat_del:calls=2,usec=90,usec_per_call=45.00

cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00

Replikasi asinkron

Instans Azure Cache for Redis di tingkat Standar atau Premium dikonfigurasikan dengan node utama dan minimal satu replika. Data disalin dari node utama ke replika secara asinkron dengan menggunakan proses latar belakang. Situs web redis.io menjelaskan bagaimana replikasi data Redis bekerja secara umum. Untuk skenario di mana klien sering menulis ke Redis, kehilangan sebagian data dapat terjadi karena replikasi tidak dijamin secara instan. Misalnya, jika kunci utama tidak berfungsi setelah klien menuliskan kunci, tetapi sebelum proses latar belakang berkesempatan untuk mengirim kunci tersebut ke replika, kunci tersebut akan hilang saat replika mengambil alih sebagai kunci utama yang baru.

Kehilangan kunci utama atau lengkap

Jika sebagian besar atau semua kunci hilang dari cache Anda, periksa kemungkinan penyebabnya berikut:

Penyebab Deskripsi
Pembersihan kunci Kunci telah dihapus menyeluruh secara manual.
Pemilihan database yang salah Azure Cache for Redis ditetapkan untuk menggunakan database non-default.
Kegagalan instans Redis Server Redis tidak tersedia.

Pembersihan kunci

Klien dapat memanggil perintah FLUSHDB untuk menghapus semua kunci dalam database tunggal atau FLUSHALL untuk menghapus semua kunci dari semua database di cache Redis. Untuk mengetahui apakah kunci telah dibersihkan, gunakan perintah INFO. Bagian Commandstats menunjukkan apakah salah satu perintah FLUSH telah dipanggil:

# Commandstats

cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00

cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00

Pemilihan database yang salah

Azure Cache for Redis menggunakan database db0 secara default. Jika Anda beralih ke database lain (misalnya, db1) dan mencoba membaca kunci darinya, Azure Cache for Redis tidak akan menemukannya di sana. Setiap database adalah unit yang terpisah secara logis dan menyimpan himpunan data yang berbeda. Gunakan perintah PILIH untuk menggunakan database yang tersedia dan melihat kunci masing-masing.

Kegagalan instans Redis

Redis adalah penyimpanan data dalam memori. Data disimpan di komputer fisik atau virtual yang meng-hosting cache Redis. Instans Azure Cache for Redis di tingkat Dasar berjalan di satu komputer virtual saja. Jika komputer virtual tersebut dinonaktifkan, semua data yang Anda simpan di cache akan hilang.

Cache di tingkat Standar dan Premium menawarkan ketahanan yang jauh lebih tinggi terhadap kehilangan data dengan menggunakan dua komputer virtual dalam konfigurasi yang direplikasi. Ketika node utama dalam cache tersebut gagal, node replika mengambil alih untuk menayangkan data secara otomatis. VM ini terletak di domain terpisah untuk kesalahan dan pembaruan, untuk meminimalkan kemungkinan keduanya menjadi tidak tersedia secara bersamaan. Namun, jika penonaktifan pusat data utama terjadi, komputer virtual mungkin masih tidak berfungsi secara bersamaan. Data Anda akan hilang dalam kasus yang jarang terjadi ini.

Pertimbangkan penggunaan kehadiran data Redis dan replikasi geografis untuk meningkatkan perlindungan terkait data terhadap kegagalan infrastruktur ini.

Informasi tambahan

Artikel ini memberikan informasi lebih lanjut tentang menghindari kehilangan data: