Di bawah .NET 1.1, Cache hanya dapat membuat dependensi Cache berdasarkan sistem file, objek, dll., tetapi .NET 2.0 menyediakan dependensi baru, SqlCacheDependency, yang memungkinkan Cache kami bergantung pada perubahan dalam database. Meskipun pendekatan ini terlihat mirip dengan solusi di 1.1, ada perbedaan mendasar di antara keduanya (penyediaan objek SqlCacheDependency). (Solusi untuk 1.1 adalah dengan membuat pemicu untuk tabel data, dan kemudian pemicu tersebut akan mengubah file lokal ketika dipicu. Ketergantungan Cache tertentu dalam sistem adalah file lokal ini, untuk memberi tahu Cache tentang cache yang di-cache datanya berubah)
SqlCacheDependency .NET 2.0 dapat digunakan dalam versi setelah SqlServer2000. Artikel ini memperkenalkan cara menggunakannya di bawah Sql Server 2000. Sql Server 2005 sedikit berbeda.
Pertama, Anda perlu menginstal framework .NET 2.0, tentu saja Sql Server 2000 harus tersedia. Di .NET 2.0, Microsoft menyediakan alat utilitas: aspnet_regsql (di direktori yang sama dengan aspnet_regiis). Ini adalah alat baris perintah. Parameter baris perintah dapat diperoleh melalui aspnet_regsql -?. Di sini kami memperhatikan parameter berikut: -ed memulai database untuk dependensi cache SQL, -E menggunakan kredensial windows saat ini untuk otentikasi, -d digunakan untuk nama database server aplikasi, jika tidak ada nama database yang ditentukan, default database yang digunakan adalah "aspnetdb". Contoh pub database Microsoft akan digunakan dalam artikel ini. Kemudian kita perlu menggunakan baris perintah berikut untuk membuat database yang bergantung pada cache:
aspnet_regsql -ed -E -d pubs
(Catatan: Parameter baris perintah di sini peka huruf besar-kecil)
Setelah menjalankan perintah ini, kita dapat membuka database pub untuk melihat perubahan apa yang terjadi. Pertama, ada tabel tambahan: AspNet_SqlCacheTablesForChangeNotification nama tabel, notifikasiDibuat: waktu pembuatan. changeId: ganti nomor (bidang kumulatif). Anda juga dapat melihat bahwa database memiliki beberapa prosedur tersimpan lagi, yaitu:
AspNet_SqlCacheRegisterTableStoredProcedure,
AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
Prosedur tersimpan ini mudah dipahami secara harfiah. Detail prosedur tersimpan dapat dilihat setelah membukanya di penganalisis kueri. Untuk memantau perubahan dalam tabel, kita perlu menentukan tabel yang perlu dipantau dengan menjalankan prosedur tersimpan AspNet_SqlCacheRegisterTableStoredProcedure. Tentu saja, ini juga dapat ditentukan melalui alat utilitas aspnet_regsql.
aspnet_regsql -et -E -d pub -t penulis
Setelah menjalankan perintah di atas, aspnet_regsql akan membuat trigger untuk penulis. Berikut trigger yang saya buat setelah menjalankan perintah:
SETEL QUOTED_IDENTIFIER AKTIF
PERGI
SETEL ANSI_NULLS AKTIF
PERGI
ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] AKTIF [penulis]
UNTUK MASUKKAN, PERBARUI, HAPUS SEBAGAI AWAL
SETEL NOCOUNT AKTIF
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'penulis'
AKHIR
PERGI
MATIKAN QUOTED_IDENTIFIER
PERGI
SETEL ANSI_NULLS AKTIF
PERGI
Seperti yang terlihat dari pemicunya, prosedur tersimpan AspNet_SqlCacheUpdateChangeIdStoredProcedure akan dijalankan ketika tabel penulis disisipkan, dihapus, dan diperbarui. Prosedur tersimpan ini akan menambahkan catatan ke tabel AspNet_SqlCacheTablesForChangeNotification. Catatannya adalah sebagai berikut:
pemberitahuan nama tabelMembuat changeId
penulis 20-06-2006 09:38:26.267 1
Saat Anda melakukan modifikasi apa pun pada data di penulis, changeId akan diakumulasikan, dan bidang lainnya tidak akan berubah.
Maka Anda perlu menambahkan beberapa konten di web.config dan Anda dapat menggunakannya.
Pertama tambahkan string koneksi database:
<koneksiString>
<tambahkan nama="pubsConString" connectionString="server=localhost;database=pubs;uid=sa;pwd=kata sandi saya;"/>
</connectionStrings>
Kedua tambahkan bagian cache:
<sistem.web>
<cache>
<sqlCacheDependency diaktifkan="benar">
<database>
<tambahkan nama="pub" connectionStringName="pubsConString" pollTime="900"/>
</database>
</sqlCacheDependency>
</caching>
</sistem.web>
Berikut ini adalah kode pengujian. Saat halaman dimuat, kode berikut dijalankan:
protected void Page_Load(pengirim objek, EventArgs e) {
if (HttpContext.Current.Cache["xxx"] == null) {
SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs adalah pub yang ditentukan di bagian database, diikuti dengan nama tabel
HttpContext.Saat ini.Cache.Insert("xxx", "xxx", d);
Response.Write("Buat nilai cache baru adalah xxx.");
}
kalau tidak{
Response.Write("Muat data dari cache, nilainya adalah "+HttpContext.Current.Cache["xxx"].ToString());
}
}
Saat pertama kali dibuka halaman ini akan menampilkan:
Buat nilai cache baru adalah xxx.
Setelah menyegarkan halaman, ini akan menampilkan:
Memuat data dari cache, nilainya xxx
Saat menggunakan penganalisis kueri untuk mengubah data di penulis dan menyegarkan halaman lagi, ini akan menampilkan:
Nilai buat cache baru adalah xxx.
Ini menunjukkan bahwa Cache berfungsi normal. Ketika tabel penulis berubah, konten di Cache secara otomatis menjadi tidak valid, dan aplikasi saya juga akan membuat ulang objek Cache.
Catatan: SqlCacheDependency terdiri dari dua konstruktor, SqlServer2000 hanya mendukung dua parameter, dan satu parameter mendukung SqlServer2005.