Penyimpanan data dan cache yang sebenarnya harus disinkronkan menggunakan pendekatan ketiga yang telah Anda jelaskan dalam pertanyaan Anda.
Saat Anda menambahkan data ke penyimpanan definitif Anda (yaitu database SQL Anda), Anda perlu mengantrekan data ini ke beberapa bus layanan atau antrian pesan, dan membiarkan beberapa layanan asinkron melakukan seluruh sinkronisasi menggunakan semacam proses latar belakang.
Anda tidak ingin terlibat dalam kasus ini (bila tidak menggunakan bus layanan dan layanan asinkron):
- Buat permintaan atau proses Anda lebih lambat karena pengguna harus menunggu hingga data disimpan di database dan cache Anda.
- Memiliki risiko gagal selama proses caching dan tidak dapat memiliki kebijakan coba lagi (yang biasanya merupakan fitur bawaan di bus layanan atau beberapa antrian pesan). Selain itu, kegagalan ini dapat mengakibatkan kerusakan cache sebagian atau seluruhnya dan Anda tidak akan dapat menjadwalkan beberapa tugas secara otomatis dan mudah untuk memperbaiki situasi ini.
Tentang menggunakan kedaluwarsa kunci Redis, itu ide yang bagus. Karena Redis dapat kedaluwarsa kunci menggunakan mekanisme bawaannya, Anda tidak boleh menerapkan kedaluwarsa kunci dari seluruh proses latar belakang. Jika kunci ada karena masih valid.
BTW, Anda tidak akan selalu dalam kasus ini (jika kunci tidak kedaluwarsa, itu berarti tidak boleh ditimpa). Ini mungkin tergantung pada domain Anda yang sebenarnya.