Cache disk sistem file persisten untuk asp.net

Ringkasan: https://www.codeproject.com/articles/12097/cache-management-in-asp-sasp-net
Gunakan istilah yang berbeda untuk menjelaskan konsep yang sama, yaitu, mengelola data. Beberapa orang menyebutnya sebagai manajemen negara dan beberapa lainnya menyebutnya sebagai manajemen cache. Saya suka kata "cache". Tetapi secara konseptual, tidak ada perbedaan antara keduanya.
Sekarang mari kita bahas berbagai aspek manajemen cache (atau manajemen negara) di ASP.NET.
Meskipun manajemen cache bukan masalah dalam aplikasi Windows, itu selalu menjadi tantangan di lingkungan web. Karena HTTP adalah protokol tanpa kewarganegaraan dan server web tidak mengenali pengguna antara permintaan yang berbeda, menjadi sangat penting bagi kami untuk mengenali pengguna tertentu antara permintaan yang berbeda dan juga menyimpan data sehingga dapat digunakan kembali di antara berbagai permintaan. ASP.NET menyediakan banyak fitur untuk menyimpan data baik di sisi klien (browser) dan server (server web), tetapi kadang -kadang kita bingung dengan kapan menggunakan apa. Di ASP.NET, kami menemukan fitur seperti sesi, aplikasi dan objek cache, tetapi penting bagi kami untuk memahami perbedaan di antara mereka untuk menggunakannya secara efektif dalam aplikasi web.
Dalam artikel ini, saya akan menyentuh berbagai opsi manajemen cache yang tersedia di ASP.NET. Dalam aplikasi web, kadang-kadang kami perlu menyimpan data di sisi server untuk menghindari operasi pengambilan data yang mahal dari penyimpanan data dan logika pemformatan data yang memakan waktu untuk meningkatkan kinerja aplikasi serta menggunakan kembali data yang sama dalam permintaan selanjutnya di seluruh pengguna, aplikasi, dan mesin. Jadi, untuk mencapai ini, kita perlu menyimpan data (cache) di sisi server.
Caching membantu kita mencapai tiga aspek penting dari QoS (kualitas layanan):
ASP.NET menyediakan objek yang disebut Objek Aplikasi untuk menyimpan data yang dapat diakses oleh semua permintaan pengguna. Rentang hidup objek ini terkait dengan aplikasi dan diciptakan kembali setiap kali aplikasi dimulai. Berbeda dengan objek sesi ASP.NET, objek ini dapat diakses oleh semua permintaan pengguna. Karena penyimpanan ini dibuat dan dipelihara dalam ruang domain aplikasi, ini tidak boleh digunakan untuk penyimpanan data dalam skenario pertanian web. Opsi ini sangat berguna untuk menyimpan data seperti metadata aplikasi (data file konfigurasi) yang dapat dimuat ke objek aplikasi selama aplikasi mulai dan dapat digunakan selama masa pakai aplikasi tanpa memuatnya kembali setiap kali untuk setiap permintaan pengguna. Tetapi jika ada persyaratan untuk membatalkan data yang di -cache setiap kali ada perubahan pada file konfigurasi saat aplikasi sedang berjalan, opsi ini tidak boleh digunakan karena tidak menyediakan fitur apa pun untuk kedaluwarsa data yang di -cache. Jadi dalam hal ini, opsi lain seperti objek cache ASP.NET harus digunakan, yang dijelaskan di bawah ini.
ASP.NET menyediakan objek pasangan nilai kunci - objek cache yang tersedia di namespace System.web.caching. Ruang lingkupnya adalah domain aplikasi dan rentang hidup terkait dengan aplikasi. Berbeda dengan objek sesi ASP.NET, objek ini dapat diakses oleh semua permintaan pengguna.
Meskipun baik objek aplikasi dan cache terlihat sama, perbedaan utama di antara mereka adalah fitur yang ditambahkan yang disediakan oleh objek cache seperti kebijakan dan dependensi kedaluwarsa. Ini berarti bahwa data yang disimpan dalam objek cache dapat dikadarkan/dihapus berdasarkan beberapa batas waktu yang telah ditentukan yang ditetapkan oleh kode aplikasi atau ketika entitas yang tergantung diubah sedangkan fitur ini tidak tersedia dalam objek aplikasi.
Mari kita bahas kebijakan kedaluwarsa yang berbeda dan ketergantungan yang didukung.
Ketergantungan berarti bahwa suatu item dapat dihapus dari cache ketika entitas yang tergantung diubah. Jadi hubungan dependen dapat didefinisikan pada item yang penghapusan dari cache akan tergantung pada dependen. Ada dua jenis dependensi yang didukung di ASP.NET.
Contoh: Katakanlah di aplikasi saya, saya menggunakan file XML untuk menyimpan detail kesalahan (nomor kesalahan dan pemetaan pesan kesalahan) yang digunakan untuk mengambil pesan kesalahan untuk nomor kesalahan yang diberikan saat runtime. Jadi, alih -alih membaca file dari disk setiap kali saya membutuhkan pesan kesalahan, katakanlah saya memutuskan untuk memuatnya sekali di startup aplikasi dan menyimpannya di cache ASP.NET untuk digunakan lebih lanjut. Jadi, jika saya perlu mengubah file konfigurasi untuk menambahkan pesan kesalahan baru atau mengubah beberapa pesan kesalahan yang ada saat aplikasi sedang berjalan, lalu apa yang akan terjadi pada data cache saya? Apakah saya perlu menghentikan aplikasi dan memulainya lagi untuk mencerminkan perubahan file dalam aplikasi? Jawabannya adalah tidak. Data cache dapat dibatalkan setiap kali file berubah dengan menggunakan opsi ketergantungan file.
Kebijakan kedaluwarsa menetapkan kebijakan untuk bagaimana dan kapan item dalam cache harus kedaluwarsa.
Objek Singleton .NET Remoting berbagi contoh yang sama dengan banyak klien sehingga objek Singleton dapat digunakan untuk menyimpan dan berbagi data antara doa klien yang berbeda. Karena .NET Remoting dapat digunakan di luar proses dan mesin, opsi ini sangat berguna ketika kami ingin cache data dan membagikannya di seluruh server dan pengguna khususnya dalam skenario pertanian web. Dalam pendekatan ini, kami dapat menyimpan data sebagai variabel anggota objek remoting singleton dan menyediakan metode untuk membaca dan menyimpan data. Tetapi saat menerapkan ini, kita perlu memastikan bahwa objek remoting yang digunakan sebagai cache tidak dihancurkan oleh pengumpul sampah. Untuk itu, kita harus mengatur periode sewa objek cache remoting menjadi tak terbatas sehingga periode sewa tidak pernah berkali -kali. Kita dapat melakukannya dengan mengesampingkan metode inisialisasi di antara MarshalByRefObject dan mengembalikan nol dari metode ini. Tetapi satu -satunya masalah dengan pendekatan ini adalah kinerja. Seperti yang dikatakan analisis, kinerjanya sangat buruk dalam pendekatan ini jika dibandingkan dengan pendekatan lain. Ngomong -ngomong, terserah perancang/pengembang aplikasi untuk menganalisis berbagai opsi dan menggunakan yang terbaik yang sesuai dengan persyaratan.
Anda semua tahu apa file yang dipetakan memori. Ini pada dasarnya tentang memetakan file pada disk ke berbagai alamat tertentu dalam ruang alamat proses aplikasi. Opsi ini memungkinkan proses yang berbeda untuk menggunakan data yang sama dengan meningkatkan kinerja aplikasi. Karena menggunakan file yang dipetakan memori tidak terlalu populer di kalangan pengembang .NET, saya pribadi tidak akan menyarankan pendekatan ini karena menerapkan ini melibatkan banyak kompleksitas dan juga .NET Framework tidak mendukung ini. Tetapi jika ada orang yang sangat tertarik untuk menggunakan pendekatan ini, maka mereka harus mengembangkan solusi khusus mereka sendiri sesuai kebutuhan mereka sendiri.
Kami menggunakan variabel statis untuk menyimpan data atau objek secara global sehingga dapat diakses selama masa pakai aplikasi. Demikian pula, di ASP.NET, kami dapat menggunakan objek statis untuk caching data dan kami juga dapat memberikan metode untuk mengambil dan menyimpan data ke cache. Karena variabel statis disimpan di area proses, kinerja lebih cepat. Tetapi karena sangat sulit untuk menerapkan kebijakan dan dependensi kedaluwarsa jika terjadi variabel statis, saya biasanya lebih suka objek cache ASP.NET daripada opsi ini. Masalah lain adalah bahwa objek cache statis khusus harus aman-utas yang harus diimplementasikan dengan hati-hati.
Kami juga dapat menggunakan database untuk menyimpan data dan berbagi data di seluruh pengguna dan mesin. Pendekatan ini sangat berguna ketika kami ingin menyimpan data dalam jumlah besar. Menggunakan pendekatan ini untuk menyimpan sejumlah kecil data bukanlah ide yang baik karena kinerja. Untuk menyimpan sejumlah kecil data, kita harus pergi untuk mekanisme caching asp.net dalam proses lainnya. Karena data perlu disimpan dalam database, semua objek harus diserialisasi XML sehingga lebih mudah untuk disimpan dan diambil. Kami juga dapat menggunakan jenis format serialisasi lain yang tersedia dalam kerangka .NET.
Terkadang dalam aplikasi kami, di beberapa halaman, output umumnya tidak berubah untuk periode waktu tertentu. Misalnya, di situs web SDM, detail gaji seorang karyawan tidak sering berubah dan hanya berubah sekali dalam sebulan. Secara umum, itu hanya berubah pada hari pertama setiap bulan. Jadi selama sebulan, halaman Detail Gaji akan menunjukkan detail yang sama untuk karyawan tertentu. Jadi dalam hal ini, bukankah itu ide yang baik untuk menyimpan halaman di suatu tempat di server untuk menghindari pemrosesan perhitungan bisnis, panggilan ke database dan halaman rendering logika setiap kali karyawan ingin melihat rincian gajinya. Menurut saya, ya! Itu adalah ide yang sangat bagus. Untuk mencapai hal ini, ASP.NET menyediakan fitur untuk menyimpan output halaman di server untuk periode waktu tertentu. Ini juga menyediakan fitur untuk menyimpan fragmen halaman yang dikenal sebagai caching fragmen halaman.
Kadang -kadang kita mungkin perlu cache data atau halaman di sisi klien untuk meningkatkan kinerja aplikasi. Menggunakan mekanisme ini mengurangi beban di server tetapi mekanisme ini memiliki beberapa masalah keamanan saat kami men -cache data di sisi klien.
Cookie adalah penyimpanan sisi klien yang dikirim ke server untuk setiap permintaan dan juga menerima sebagai respons kembali dari server. Karena batasan ukurannya, itu harus digunakan untuk menyimpan sejumlah kecil data. Kebijakan kedaluwarsa dapat ditetapkan untuk cookie untuk membatalkan item setelah periode waktu tertentu.
ASP.NET ViewState adalah konsep hanya di WebForms (bukan MVC) di mana data yang terkait dengan halaman dan kontrol disimpan di halaman yang dihasilkan (sisi klien). yang mempertahankan nilai -nilai di beberapa permintaan ke server. ViewState diimplementasikan secara internal sebagai bidang tersembunyi yang dienkripsi di ASP.NET. ViewState tidak boleh digunakan untuk menyimpan data dalam jumlah besar saat diteruskan ke server untuk setiap permintaan.
Bidang tersembunyi mirip dengan kontrol lain di halaman tetapi keadaan yang terlihat dari kontrol ini selalu salah. Seperti ViewState, kita tidak boleh menggunakannya untuk menyimpan data dalam jumlah besar. Bingkai tersembunyi dapat digunakan untuk cache data di sisi klien, tetapi perhatikan bahwa bingkai tersembunyi tidak didukung oleh semua browser internet.
Browser Internet menyediakan mekanisme caching untuk menangani halaman di sisi klien. Ini dapat diatur menggunakan arahan kedaluwarsa yang ditambahkan ke header halaman atau dengan mengaturnya secara manual di server web. Kita harus menggunakan opsi ini untuk caching halaman statis, skrip, CSS dan gambar di sisi klien.
Dibuat dengan ❤️ oleh Javier Cañon.