Mitos 1: snapshot RDB rutin sudah sama dengan backup
dump.rdb) yang berisi seluruh dataset pada satu titik waktu. Redis membuatnya lewat BGSAVE. Proses utama melakukan fork, lalu child process menulis isi memori ke disk sementara proses utama tetap melayani request. Kapan snapshot dibuat diatur oleh aturan save, formatnya kira-kira setiap sekian detik jika ada minimal sekian perubahan. Nilai default-nya berbeda antarversi dan antarpaket, jadi sebaiknya dicek langsung di instance kamu.
Anggapan ini terasa benar karena di keseharian datanya memang selalu balik. Restart terkontrol lewat SHUTDOWN umumnya menyimpan snapshot dulu sebelum proses berhenti, jadi setelah restart semuanya terlihat utuh. Di support, pola ini sering muncul: tim yakin Redis aman karena sudah berkali-kali restart tanpa masalah. Padahal yang diuji baru restart rapi, bukan crash.
Kalau yang terjadi kernel panic, node mati listrik, atau proses dibunuh OOM killer, tidak ada kesempatan menyimpan snapshot terakhir. Redis akan memuat RDB terakhir yang berhasil ditulis. Ambil contoh ilustrasi: snapshot terakhir lima menit lalu. Semua decrement stok selama lima menit itu hilang, dan stok yang dimuat ulang lebih tinggi dari kenyataan. Di sistem stok, ini berarti barang yang sudah terjual bisa terjual lagi.
Ada dua hal lain yang perlu diperhatikan. Pertama, fork di instance bermemori besar butuh waktu dan memori tambahan karena copy-on-write. Kalau BGSAVE gagal, interval kehilangan datamu diam-diam jadi lebih panjang. Kedua, dengan stop-writes-on-bgsave-error aktif, Redis akan menolak write setelah snapshot gagal. Ini aman dari sisi data, tapi bisa terlihat seperti outage di tengah flash sale.
Mitos 2: begitu AOF aktif, tidak ada data yang hilang
appendfsync.
Yang perlu dipahami: menulis ke file belum berarti data sudah aman di disk. Data bisa masih di page cache kernel sampai fsync dipanggil. Opsi appendfsync mengatur kapan Redis memaksa fsync.
always: fsync dilakukan sebelum Redis membalas client. Kehilangan data paling kecil, tapi throughput bergantung pada kecepatan disk. Di disk lambat, ini terasa sekali.everysec: fsync sekitar sekali per detik di background. Ini default yang umum dan kompromi yang paling sering dipakai. Kalau node crash, yang hilang biasanya sekitar satu detik terakhir, bisa sedikit lebih kalau disk sedang lambat.no: Redis menyerahkan flush ke kernel. Jendela kehilangan data jadi tergantung perilaku writeback OS, dan biasanya lebih lebar dari satu detik.
everysec nyaris tidak kehilangan apa pun pada crash proses. Perbedaan antaropsi baru terasa kalau seluruh node mati, misalnya kernel panic, host virtualisasi down, atau listrik padam. Itulah skenario yang perlu dipakai saat menghitung RPO (Recovery Point Objective, yaitu berapa banyak data terakhir yang masih bisa diterima hilang).
Satu jebakan saat mengaktifkan AOF di instance yang sudah berisi data: jangan langsung mengubah appendonly yes di file konfigurasi lalu restart. Di beberapa versi, Redis yang dikonfigurasi memakai AOF akan memuat dari AOF. Kalau file AOF belum ada, instance bisa naik dengan dataset kosong. Cara yang lebih aman adalah mengaktifkannya saat runtime dengan CONFIG SET appendonly yes, menunggu proses penulisan AOF awal selesai, baru menyimpan konfigurasinya. Cek dokumentasi versi yang kamu pakai, karena format AOF sendiri sudah berubah di Redis 7 menjadi beberapa file dalam satu direktori.
Mitos 3: replica dan Redis Cluster otomatis menutup celah ini
WAIT bisa membuat client menunggu sampai sejumlah replica menerima write. Celahnya jadi lebih kecil, tapi dokumentasi Redis sendiri menyebut ini tidak menjadikan Redis strongly consistent.
Ada juga kombinasi yang berbahaya: master tanpa persistensi tapi diatur restart otomatis. Kalau master crash lalu cepat hidup lagi dengan dataset kosong, replica akan sinkron ke master tersebut dan ikut kosong. Jadi replikasi bukan pengganti persistensi. Keduanya menjawab masalah berbeda. Replikasi untuk ketersediaan, persistensi untuk pemulihan.
Mitos 4: kalau Redis sudah benar, database cukup dicatat belakangan
- Database menyimpan alokasi stok awal per item untuk event tersebut.
- Setiap order yang sudah dikonfirmasi tercatat di database dengan ID unik.
- Reservasi yang masih berjalan (misalnya menunggu pembayaran) juga punya jejak yang bisa dihitung, entah di database atau di event yang tersimpan di message queue.
- Stok yang benar adalah alokasi awal dikurangi order terkonfirmasi dan reservasi aktif. Angka itu yang dipakai untuk membangun ulang counter di Redis.
Yang perlu dicek sebelum flash sale
BASH
# Read-only: konfigurasi persistensi yang sedang berlaku
redis-cli CONFIG GET save
redis-cli CONFIG GET appendonly
redis-cli CONFIG GET appendfsync
# Status snapshot dan AOF terakhir
redis-cli INFO persistenceINFO persistence, perhatikan rdb_last_bgsave_status dan aof_last_write_status untuk memastikan tidak ada penulisan yang gagal. rdb_changes_since_last_save menunjukkan berapa perubahan yang belum masuk snapshot. aof_enabled menunjukkan apakah AOF benar-benar aktif. Di layanan Redis terkelola, perintah CONFIG sering dibatasi, jadi informasinya perlu dicari di dashboard atau dokumentasi penyedia.
Pegangan praktisnya begini. Tentukan dulu berapa detik data stok yang boleh hilang, lalu pilih persistensi yang sesuai. Untuk counter stok, biasanya itu berarti AOF dengan everysec sebagai titik awal, RDB tetap jalan sebagai salinan cadangan, dan file keduanya disalin ke luar node. Setelah itu, pastikan database relasional menyimpan cukup informasi untuk membangun ulang angka di Redis kapan pun dibutuhkan, dan uji proses itu sekali sebelum event besar. Kalau prosedur rekonsiliasi belum pernah dijalankan, kita belum benar-benar tahu apakah stok bisa dipulihkan.