Bagikan melalui


Memecahkan masalah kehilangan data di Azure Cache for Redis

Artikel ini membahas cara mendiagnosis kehilangan data parsial atau lengkap yang terjadi di Azure Cache for Redis.

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:

Kehilangan kunci parsial

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

Kunci yang ditulis ke node utama dalam instans Azure Redis Premium atau Standar mungkin tidak langsung tersedia di replika. Data direplikasi dari primer ke replika dengan cara asinkron dan tidak memblokir.

Jika beberapa kunci menghilang dari cache Anda, periksa kemungkinan penyebab berikut:

Penyebab Deskripsi
Masa berlaku kunci Kunci dihapus karena batas waktu yang ditetapkan pada kunci tersebut.
Penghapusan kunci Kunci dihapus karena tekanan memori.
Penghapusan kunci Kunci dihapus oleh perintah hapus eksplisit.
Replikasi asinkron Kunci tidak tersedia di replika karena keterlambatan replikasi data.

Masa berlaku kunci

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

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

# Stats

expired_keys:46583

# Keyspace

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

Penghapusan kunci

Azure Cache for Redis memerlukan ruang memori untuk menyimpan data dan menghapus kunci untuk mengosongkan memori yang tersedia ketika diperlukan. used_memory Saat nilai used_memory atau maxmemory mendekati pengaturan yang dikonfigurasi , Azure Redis mulai mengeluarkan kunci dari memori berdasarkan kebijakan cache.

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

# Stats

evicted_keys:13224

Penghapusan kunci

Klien Redis dapat mengeluarkan perintah Redis DEL atau HDEL untuk secara eksplisit menghapus kunci dari Azure Redis. Anda dapat melacak jumlah operasi penghapusan dengan menggunakan perintah INFO. Jika perintah DEL atau HDEL dipanggil, perintah tersebut 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 tingkat Standar atau Premium dikonfigurasi dengan satu node utama dan setidaknya satu replika. Data disalin dari node utama ke replika secara asinkron dengan menggunakan proses latar belakang.

Replikasi Redis di situs web Redis menjelaskan cara kerja replikasi data Redis secara umum. Untuk skenario di mana klien sering menulis ke Redis, kehilangan data parsial dapat terjadi karena replikasi tidak dirancang untuk seketika.

Misalnya, jika primer turun setelah klien menulis kunci ke dalamnya, tetapi sebelum proses latar belakang memiliki kesempatan untuk mengirim kunci tersebut ke replika, kunci hilang ketika replika mengambil alih sebagai primer baru.

Kehilangan kunci total

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

Penyebab Deskripsi
Pembersihan kunci Kunci dibersihkan secara manual.
Pemilihan database yang salah Azure Redis diatur untuk menggunakan database nondefault.
Kegagalan instans Redis Server Redis tidak tersedia.

Pembersihan kunci

Klien Azure Redis dapat memanggil perintah Redis FLUSHDB untuk menghapus semua kunci dalam satu database atau FLUSHALL untuk menghapus semua kunci dari semua database dalam cache Redis. Untuk mengetahui apakah kunci dibersihkan, gunakan perintah INFO . Bagian Commandstats menunjukkan apakah salah satu perintah FLUSH 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

Setiap database adalah unit yang terpisah secara logis dan menyimpan himpunan data yang berbeda. Azure Cache for Redis menggunakan database db0 secara default. Jika Anda beralih ke database lain seperti db1 dan mencoba membaca kunci darinya, Azure Redis tidak menemukannya. Gunakan perintah Redis SELECT untuk mencari kunci di database lain yang tersedia.

Kegagalan instance Redis

Redis menyimpan data dalam memori pada komputer fisik atau virtual (VM) yang menghosting cache Redis. Instans Azure Cache for Redis tingkat Dasar hanya berjalan pada satu komputer virtual (VM). Jika VM tersebut tidak berfungsi, semua data yang Anda simpan di cache akan hilang.

Cache di tingkat Standar dan Premium menawarkan ketahanan yang lebih tinggi terhadap kehilangan data dengan menggunakan dua VM 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 kedua VM menjadi tidak tersedia sekaligus. Namun, jika pemadaman pusat data utama terjadi, kedua mesin virtual (VM) bisa gagal. Dalam kasus yang jarang terjadi ini, data Anda hilang. Pertimbangkan untuk menggunakan persistensi data dan replikasi geografis untuk meningkatkan perlindungan data terhadap kegagalan infrastruktur.