Pertanyaan ini tentang praktik terbaik dalam arsitektur.
Arsitektur Kami Saat Ini
Saya memiliki kelas PHP yang mengakses MySQL untuk info pengguna. Sebut saja User
. User
diakses berkali-kali, jadi kami telah menerapkan lapisan cache untuk mengurangi beban.
Lapisan pertama adalah apa yang kita sebut cache "per permintaan". Setelah data diambil dari MySQL, kami menyimpan data di properti pribadi PT User
. Permintaan data berikutnya akan mengembalikan properti alih-alih meminta kembali data dari MySQL.
Karena permintaan web hidup dan mati berdasarkan permintaan, cache ini hanya mencegah aplikasi mengakses MySQL lebih dari sekali dalam satu permintaan.
Lapisan kedua kami adalah Memcached. Ketika properti pribadi kosong, kami pertama-tama memeriksa Memcached untuk datanya. Jika Memcached kosong, kami meminta data MySQL, memperbarui Memcached, dan memperbarui properti pribadi User
.
Pertanyaan
Aplikasi kita adalah sebuah permainan, dan kadang-kadang sangat penting bahwa beberapa data harus diperbarui. Dalam rentang waktu sekitar lima menit, permintaan baca untuk data pengguna dapat terjadi 10 atau 11 kali; maka pembaruan dapat terjadi. Permintaan baca selanjutnya harus mutakhir atau mekanisme permainan gagal.
Jadi, apa yang kami lakukan adalah mengimplementasikan sepotong kode yang dieksekusi ketika pembaruan basis data terjadi. Kode ini menetapkan kunci dalam Memcached dengan data yang diperbarui, sehingga semua permintaan berikutnya untuk Memcached terbaru.
Apakah ini optimal? Apakah ada masalah kinerja atau "gotcha" lain yang harus kita ketahui ketika mencoba mempertahankan semacam "cache hidup" seperti ini?