Lewati ke isi

Server & Infrastruktur

Cara Mengatur Persistensi Redis agar Data Tidak Hilang

Redis menyimpan data di RAM, tapi bisa ditulis ke disk lewat RDB, AOF, atau keduanya. Ini bedanya, cara mengaktifkan dengan aman, dan cara mengeceknya.

Terbit 5 menit baca

Jawaban singkat

Redis punya dua cara menyimpan data ke disk. RDB membuat snapshot berkala dan bisa kehilangan data sejak snapshot terakhir. AOF mencatat setiap perintah tulis dan dengan appendfsync everysec umumnya hanya kehilangan sekitar satu detik. Untuk data penting, aktifkan keduanya.

Daftar isi
  1. Apa saja pilihan persistensi Redis?
  2. RDB, snapshot berkala
  3. AOF, catatan setiap perintah tulis
  4. Perbandingan RDB, AOF, dan keduanya
  5. Kapan cukup RDB, kapan perlu AOF
  6. Cara mengaktifkan AOF tanpa kehilangan data
  7. Bagaimana memastikan persistensi berjalan?
  8. Pertanyaan yang sering diajukan

Persistensi Redis adalah cara Redis menyalin data dari RAM ke disk, supaya isinya kembali utuh setelah service di-restart atau server reboot. Tanpa persistensi, Redis murni sebuah cache: begitu proses berhenti, semua data hilang.

Untuk cache halaman, kehilangan itu biasanya tidak masalah karena data bisa dibuat ulang. Lain cerita bila Redis menyimpan sesi login, antrean pekerjaan, keranjang belanja, atau penghitung yang tidak tercatat di tempat lain. Salah pilih setelan di sini bisa berarti pengguna logout massal atau pekerjaan antrean lenyap setelah server restart.

Apa saja pilihan persistensi Redis?

RDB, snapshot berkala

RDB menulis seluruh isi Redis ke satu file (biasanya dump.rdb) pada interval tertentu. Prosesnya berjalan di latar belakang lewat proses anak hasil fork(), jadi Redis tetap melayani permintaan.

Jadwalnya diatur dengan direktif save <detik> <jumlah perubahan>. Nilai bawaan Redis 7 adalah:

save 3600 1 300 100 60 10000

Artinya simpan bila dalam 3600 detik ada minimal 1 perubahan, atau dalam 300 detik ada 100 perubahan, atau dalam 60 detik ada 10000 perubahan. Kelemahannya jelas: perubahan sejak snapshot terakhir hilang bila Redis mati mendadak. Kelebihannya, file RDB ringkas, cepat dimuat saat start, dan mudah dijadikan backup.

AOF, catatan setiap perintah tulis

AOF (Append Only File) mencatat setiap perintah yang mengubah data. Saat Redis start, catatan itu diputar ulang untuk membangun kembali isinya. Seberapa sering catatan dipaksa tertulis ke disk diatur oleh appendfsync:

  • always: setiap perintah. Paling aman, paling lambat.
  • everysec: sekali per detik. Ini bawaan, dan dokumentasi Redis menyebutnya kompromi yang baik, dengan potensi kehilangan sekitar satu detik data.
  • no: diserahkan ke sistem operasi. Paling cepat, tapi data yang hilang bisa lebih banyak.

File AOF terus membesar, jadi Redis menulis ulang (rewrite) secara otomatis di latar belakang. Sejak Redis 7, AOF disimpan sebagai beberapa file di folder appendonlydir, dan secara bawaan bagian dasarnya berformat RDB (aof-use-rdb-preamble yes) supaya pemuatan tetap cepat.

Perbandingan RDB, AOF, dan keduanya

AspekTanpa persistensiRDB sajaAOF sajaRDB + AOF
Data hilang bila crashSemuaSejak snapshot terakhirSekitar 1 detik (everysec)Sekitar 1 detik (everysec)
Ukuran fileTidak adaKecilLebih besarKeduanya
Kecepatan start ulangInstan, tapi kosongCepatLebih lambat pada data besarDimuat dari AOF
Mudah dijadikan backupTidakSangat mudahLebih repotPakai file RDB
Cocok untukCache murniData yang boleh hilang sebagianData pentingData penting dengan backup rapi

Saat AOF aktif, Redis memakai AOF untuk memulihkan data karena lebih lengkap. File RDB tetap berguna sebagai backup harian yang mudah dipindahkan.

Kapan cukup RDB, kapan perlu AOF

Bila Redis dipakai sebagai cache dan data aslinya ada di MySQL atau PostgreSQL, RDB saja sudah cukup, bahkan persistensi boleh dimatikan sama sekali dengan save "" agar tidak ada beban fork(). Restart hanya membuat cache dingin sebentar, seperti dibahas di memasang Redis untuk cache aplikasi.

Bila Redis menyimpan sesi, antrean job, rate limit yang harus konsisten, atau data apa pun yang tidak punya salinan di tempat lain, aktifkan AOF dengan everysec dan biarkan RDB tetap jalan untuk backup. Ini juga rekomendasi umum dari dokumentasi Redis untuk keamanan data yang mendekati database biasa.

Cara mengaktifkan AOF tanpa kehilangan data

Jangan langsung mengubah appendonly yes di file konfigurasi lalu restart pada server yang sudah berisi data. Tergantung versi dan kondisi file di disk, Redis bisa memulai dengan AOF kosong dan mengabaikan isi RDB yang ada. Cara yang lebih aman adalah mengaktifkannya saat Redis berjalan:

redis-cli CONFIG SET appendonly yes
redis-cli INFO persistence | grep -E "aof_enabled|aof_rewrite_in_progress"

Tunggu sampai aof_rewrite_in_progress:0, artinya AOF awal sudah selesai ditulis dari data di memori. Setelah itu simpan setelan ke file konfigurasi:

redis-cli CONFIG REWRITE

Bila Redis dilindungi password atau ACL, tambahkan opsi autentikasi di redis-cli. Di Ubuntu, konfigurasi ada di /etc/redis/redis.conf dan data tersimpan di folder yang ditunjuk direktif dir, umumnya /var/lib/redis.

Bagaimana memastikan persistensi berjalan?

Jalankan redis-cli INFO persistence dan perhatikan beberapa baris ini: rdb_last_bgsave_status harus ok, rdb_last_save_time menunjukkan kapan snapshot terakhir, aof_enabled bernilai 1 bila AOF aktif, dan aof_last_write_status harus ok.

Secara bawaan, Redis menolak perintah tulis bila penyimpanan RDB terakhir gagal (stop-writes-on-bgsave-error yes). Ini sering muncul sebagai error MISCONF di aplikasi. Penyebab umumnya disk penuh, izin folder salah, atau fork() gagal karena memori. Untuk yang terakhir, Redis menyarankan vm.overcommit_memory = 1 di sysctl.

Selain persistensi, pastikan Redis tidak terbuka ke internet. Langkahnya ada di mengunci Redis dan MongoDB agar tidak terbuka publik. Bila kamu sedang mempertimbangkan Valkey, setelan RDB dan AOF di atas memakai nama yang sama, lihat Redis atau Valkey.

Pertanyaan yang sering diajukan

Apakah AOF membuat Redis jauh lebih lambat?

Dengan appendfsync everysec, dampaknya umumnya kecil untuk kebanyakan aplikasi. Mode always jauh lebih berat karena setiap perintah tulis menunggu disk.

Bagaimana memulihkan Redis dari file RDB?

Hentikan Redis, matikan sementara AOF bila aktif, letakkan dump.rdb di folder dir dengan pemilik user redis, lalu jalankan Redis. Setelah data kembali, aktifkan lagi AOF dengan CONFIG SET agar AOF dibangun dari data yang sudah dimuat.

Kenapa muncul error MISCONF saat aplikasi menulis ke Redis?

Itu tanda penyimpanan RDB terakhir gagal. Cek log Redis, ruang disk, dan izin folder data. Jangan sekadar mematikan stop-writes-on-bgsave-error, karena masalah penyimpanannya tetap ada.

Apakah memakai Redis sebagai cache tetap perlu persistensi?

Tidak wajib. Kalau semua data bisa dibangun ulang dari database utama, mematikan persistensi justru menghemat disk dan menghindari beban fork. Pastikan aplikasi tahan menghadapi cache yang kosong setelah restart.

Sumber & referensi

Baca juga