Saat meminta data dari sumber mana pun, selalu ada penundaan. Ping ke server web diukur dalam milidetik, waktu akses penyimpanan dapat memiliki latensi dalam mikrodetik sementara latensi RAM diukur dalam siklus jam CPU. Tentu saja, kecepatan seperti ini tidak terpikirkan hanya beberapa dekade yang lalu, tetapi pada saat ini, kecepatannya tidak pernah cukup cepat. Kecepatan akses secara teratur beberapa bentuk hambatan dalam kinerja. Salah satu cara untuk mengatasinya adalah dengan caching.
Caching adalah proses menyimpan salinan sementara dari sumber daya dengan cara yang dapat diakses lebih cepat dari biasanya. Ada sejumlah besar implementasi baik dalam perangkat lunak dan perangkat keras. Cache dapat bertindak sebagai cache baca, cache tulis, atau keduanya.
Baca cache
Dalam cache baca data yang telah diminta sebelumnya disimpan dalam cache untuk akses yang lebih cepat. Dalam beberapa skenario, cache bahkan mungkin dimuat secara pre-emptive dengan data yang memungkinkan permintaan pertama dilayani dari cache, bukan hanya permintaan berikutnya.
Cache baca yang kemungkinan besar Anda kenal adalah cache browser. Di sini browser menyimpan salinan lokal dari sumber daya yang diminta. Ini berarti bahwa jika dan ketika halaman web dimuat ulang atau halaman serupa dimuat yang menggunakan banyak konten yang sama, konten tersebut dapat disajikan dari cache daripada server web. Ini tidak hanya berarti bahwa laman web dapat memuat lebih cepat, tetapi juga mengurangi beban di web server dan mengurangi jumlah data yang perlu diunduh pengguna yang mungkin penting pada meteran koneksi.
RAM sendiri juga bertindak sebagai cache baca untuk data di hard drive. Dalam hal ini, data untuk program yang sedang berjalan dimuat terlebih dahulu ke dalam RAM sehingga CPU dapat mengaksesnya lebih cepat. Data dari RAM selanjutnya di-cache ke cache CPU, meskipun prosesnya jauh lebih kompleks karena cache CPU diukur dalam megabyte bukan gigabyte.
Tulis cache
Cache tulis adalah cache yang dapat menyerap data yang sedang ditulis ke perangkat yang lebih lambat. Contoh umum dari hal ini adalah cache SLC di SSD modern. Cache ini tidak memungkinkan data untuk dibaca lebih cepat, namun, ini jauh lebih cepat untuk menulis daripada menulis ke flash TLC atau QLC yang membentuk sisa SSD. Cache SLC dapat menyerap operasi tulis berkecepatan tinggi, dan kemudian memindahkan data itu secepat mungkin ke flash TLC yang menawarkan kepadatan penyimpanan yang jauh lebih baik, tetapi juga jauh lebih lambat untuk menulis. Menggunakan memori flash dengan cara ini mengoptimalkannya untuk kecepatan tulis yang cepat dan kepadatan penyimpanan yang tinggi.
Cache hibrid
Ada banyak cara untuk menangani cache yang memungkinkannya berfungsi sebagai cache baca dan tulis. Masing-masing metode ini menangani operasi penulisan secara berbeda dan memiliki kelebihan dan kekurangan. Tiga opsi tersebut adalah write-around, write-through, dan write-back. Cache write-around sepenuhnya melewati cache saat menulis, cache write-through menulis ke cache tetapi hanya menganggap operasi selesai ketika telah ditulis ke penyimpanan. Cache penulisan kembali menulis ke cache dan kemudian menganggap operasi selesai, mengandalkan cache untuk mentransfernya ke penyimpanan jika diperlukan.
Write-around dapat berguna jika Anda mengharapkan volume penulisan yang besar karena meminimalkan cache churn. Namun, itu berarti bahwa operasi yang kemudian membaca salah satu dari data tertulis itu akan menghadapi setidaknya satu cache yang hilang untuk pertama kalinya. Cache write-through segera melakukan operasi penulisan cache yang berarti bahwa hasilnya dapat disajikan dari cache saat pertama kali diminta. Agar dianggap selesai, operasi tulis perlu menulis data ke disk juga yang menambah latensi. Cache write-back memiliki manfaat yang sama dengan write-through, memungkinkan data tertulis untuk segera disajikan dari cache. Itu tidak memerlukan operasi tulis untuk menulis ke disk untuk dianggap selesai. Ini mengurangi latensi penulisan tetapi disertai dengan risiko kehilangan data jika cache tidak stabil dan tidak selesai menulis data kembali ke penyimpanan sebelum daya terputus.
Bagaimana cara menghapus data dari cache?
Salah satu faktor pembatas dari setiap cache adalah kapasitas. Cache besar membutuhkan waktu lama untuk mencari, meniadakan sebagian besar keuntungan menggunakan cache di tempat pertama. Teknologi memori yang digunakan untuk caching juga cenderung lebih mahal daripada memori tempat mereka menyimpan cache. Jika bukan ini masalahnya, kemungkinan tingkat memori itu akan mengganti teknologi memori untuk meningkatkan kinerja. Kedua faktor ini berarti bahwa cache cenderung relatif kecil, terutama jika dibandingkan dengan media penyimpanan tempat penyimpanan cache. RAM memiliki kapasitas lebih kecil dari penyimpanan dan cache CPU memiliki kapasitas lebih sedikit daripada RAM. Cache SLC memiliki kapasitas yang lebih kecil daripada memori TLC.
Semua ini berarti bahwa seringkali perlu untuk menggilir data keluar dari cache untuk mengosongkan ruang bagi data baru yang perlu di-cache. Ada berbagai pendekatan yang berbeda untuk ini. “Paling jarang digunakan”, lebih memilih untuk menghapus entri cache yang memiliki jumlah akses terendah. Ini dapat berguna untuk memprediksi entri mana yang memiliki efek paling kecil pada kehilangan cache di masa mendatang, tetapi juga akan menghitung entri yang ditambahkan baru-baru ini sebagai memiliki jumlah akses yang rendah, yang dapat menyebabkan cache mengocok.
"Paling tidak digunakan baru-baru ini" lebih memilih untuk menghapus entri cache yang sudah lama tidak digunakan. Ini mengasumsikan bahwa mereka tidak digunakan saat ini, tetapi tidak memperhitungkan jika mereka banyak digunakan beberapa waktu lalu. "Paling baru digunakan" lebih memilih untuk mengeluarkan entri cache yang paling baru digunakan, dengan asumsi bahwa entri tersebut telah digunakan dan tidak perlu digunakan lagi. Pendekatan terbaik umumnya merupakan kombinasi dari ketiganya, diinformasikan oleh statistik penggunaan.
Informasi basi dan risiko keamanan
Risiko utama cache adalah informasi yang dikandungnya dapat menjadi basi. Entri cache dianggap basi ketika data asli telah diperbarui meninggalkan entri cache kedaluwarsa. Sangat penting untuk secara teratur memverifikasi bahwa salinan langsung yang disajikan masih cocok dengan salinan yang disimpan dalam cache.
Di situs web secara khusus, juga sangat penting untuk mengidentifikasi data apa yang dapat dan tidak dapat di-cache. Misalnya, tidak masalah jika file JavaScript besar yang tidak berubah di-cache. Ini menyelamatkan pengguna dari mengunduhnya setiap saat, dan bahkan dapat menguntungkan pengguna lain yang dilayani oleh cache yang sama. Anda tidak dapat men-cache data khusus sesi. Bayangkan apa yang akan terjadi jika Anda menjelajahi aplikasi perpesanan saat masuk sebagai diri sendiri, hanya untuk menemukan bahwa Anda disajikan dengan versi cache dari pesan pengguna lain. Untungnya, server web dapat menentukan sumber daya mana yang dapat dan tidak dapat di-cache dan masalah ini umumnya diketahui sehingga ada beberapa masalah seperti ini.
Kesimpulan
Cache adalah bagian dari memori yang dapat menyimpan beberapa data yang baru saja digunakan dalam metode penyimpanan yang lebih cepat diakses daripada menyelesaikan proses akses data normal lagi. Cache biasanya terbatas dalam kapasitas yang berarti perlu mengeluarkan entri setelah penuh. Tembolok umumnya transparan bagi pengguna, artinya latensi adalah satu-satunya indikasi bahwa hasilnya disajikan melalui cache.