ภายใต้ .NET 1.1 แคชสามารถสร้างการขึ้นต่อกันของแคชตามระบบไฟล์ อ็อบเจ็กต์ ฯลฯ เท่านั้น แต่ .NET 2.0 จัดให้มีการขึ้นต่อกันใหม่ SqlCacheDependency ซึ่งช่วยให้แคชของเราขึ้นอยู่กับการเปลี่ยนแปลงในฐานข้อมูล แม้ว่าวิธีการนี้จะดูคล้ายกับวิธีแก้ปัญหาใน 1.1 แต่ก็มีความแตกต่างที่สำคัญระหว่างวิธีเหล่านี้ (ข้อกำหนดของวัตถุ SqlCacheDependency) (วิธีแก้ปัญหาสำหรับ 1.1 คือการสร้างทริกเกอร์สำหรับตารางข้อมูล จากนั้นทริกเกอร์จะแก้ไขไฟล์ในเครื่องเมื่อถูกทริกเกอร์ การขึ้นต่อกันของแคชบางตัวในระบบคือไฟล์ในเครื่องนี้ เพื่อแจ้งแคชของแคชที่เก็บไว้ ข้อมูลมีการเปลี่ยนแปลง)
SqlCacheDependency ของ .NET 2.0 สามารถใช้ได้ในเวอร์ชันหลังจาก SqlServer2000 บทความนี้จะแนะนำวิธีใช้งานภายใต้ Sql Server 2000 Sql Server 2005 จะแตกต่างออกไปเล็กน้อย
ขั้นแรก คุณต้องติดตั้งเฟรมเวิร์ก .NET 2.0 แน่นอนว่า Sql Server 2000 ต้องพร้อมใช้งาน ใน .NET 2.0 Microsoft มีเครื่องมืออรรถประโยชน์: aspnet_regsql (ในไดเร็กทอรีเดียวกับ aspnet_regiis) นี่คือเครื่องมือบรรทัดคำสั่งสามารถรับพารามิเตอร์บรรทัดคำสั่งได้ผ่าน aspnet_regsql -? ที่นี่เราสนใจเกี่ยวกับพารามิเตอร์ต่อไปนี้: -ed เริ่มต้นฐานข้อมูลสำหรับการพึ่งพาแคช SQL -E ใช้ข้อมูลประจำตัว windows ปัจจุบันสำหรับการตรวจสอบสิทธิ์ -d ใช้สำหรับชื่อฐานข้อมูลของแอปพลิเคชันเซิร์ฟเวอร์ หากไม่มีการระบุชื่อฐานข้อมูล ค่าเริ่มต้น ฐานข้อมูลใช้ "aspnetdb" ผับฐานข้อมูลตัวอย่างของ Microsoft จะถูกนำมาใช้ในบทความนี้ จากนั้นเราจำเป็นต้องใช้บรรทัดคำสั่งต่อไปนี้เพื่อสร้างฐานข้อมูลที่ขึ้นกับแคช:
aspnet_regsql -ed -E -d pubs
(หมายเหตุ: พารามิเตอร์บรรทัดคำสั่งที่นี่จะคำนึงถึงขนาดตัวพิมพ์)
หลังจากดำเนินการคำสั่งนี้แล้ว เราสามารถเปิดฐานข้อมูล pubs เพื่อดูว่ามีการเปลี่ยนแปลงอะไรบ้าง ขั้นแรกจะมีตารางเพิ่มเติม: AspNet_SqlCacheTablesForChangeNotification ชื่อตาราง, การแจ้งเตือนที่สร้างแล้ว: เวลาในการสร้าง changeId: เปลี่ยนหมายเลข (ฟิลด์สะสม) นอกจากนี้คุณยังสามารถเห็นว่าฐานข้อมูลมีขั้นตอนการจัดเก็บเพิ่มเติมหลายประการ ได้แก่:
AspNet_SqlCacheRegisterTableStoredProcedure,
AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
ขั้นตอนการจัดเก็บเหล่านี้ง่ายต่อการเข้าใจอย่างแท้จริง รายละเอียดของขั้นตอนการจัดเก็บสามารถดูได้หลังจากเปิดขึ้นมาในตัววิเคราะห์แบบสอบถาม ในการตรวจสอบการเปลี่ยนแปลงในตารางเราจำเป็นต้องระบุตารางที่ต้องได้รับการตรวจสอบโดยดำเนินการตามขั้นตอนที่เก็บไว้ AspNet_SqlCacheRegisterTableStoredProcedure แน่นอนว่าสามารถระบุผ่านเครื่องมืออรรถประโยชน์ aspnet_regsql ได้ บรรทัดคำสั่งมีดังนี้:
aspnet_regsql -et -E -d pubs -t ผู้เขียน
หลังจากดำเนินการคำสั่งข้างต้น aspnet_regsql จะสร้างทริกเกอร์สำหรับผู้เขียน ต่อไปนี้เป็นทริกเกอร์ที่ฉันสร้างขึ้นหลังจากดำเนินการคำสั่ง:
เปิด QUOTED_IDENTIFIER
ไป
ตั้งค่า ANSI_NULLS เป็นเปิด
ไป
เปลี่ยนทริกเกอร์ dbo [authors_AspNet_SqlCacheNotification_Trigger] เปิด [ผู้เขียน]
สำหรับการแทรก อัปเดต ลบตั้งแต่เริ่มต้น
ตั้งหมายเลขเป็น
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N 'ผู้เขียน'
จบ
ไป
ตั้งค่า QUOTED_IDENTIFIER ปิด
ไป
ตั้งค่า ANSI_NULLS เป็นเปิด
ไป
ดังที่เห็นได้จากทริกเกอร์ กระบวนการที่เก็บไว้ AspNet_SqlCacheUpdateChangeIdStoredProcedure จะถูกดำเนินการเมื่อมีการแทรก ลบ และอัปเดตตารางผู้เขียน บันทึกมีดังนี้:
การแจ้งเตือนชื่อตารางสร้างรหัสการเปลี่ยนแปลงแล้ว
ผู้เขียน 2006-06-20 09:38:26.267 1
เมื่อคุณทำการแก้ไขข้อมูลในผู้เขียน changeId จะถูกสะสม และฟิลด์อื่นๆ จะไม่เปลี่ยนแปลง
จากนั้นคุณจะต้องเพิ่มเนื้อหาบางส่วนใน web.config และคุณสามารถใช้งานได้
ขั้นแรกให้เพิ่มสตริงการเชื่อมต่อฐานข้อมูล:
<สตริงการเชื่อมต่อ>
<เพิ่ม name="pubsConString" ConnectionString="server=localhost;database=pubs;uid=sa;pwd=mypassword;"/>
</connectionStrings>
เพิ่มส่วนแคชขั้นที่สอง:
<system.เว็บ>
<แคช>
<sqlCacheDependency ที่เปิดใช้งาน = "true">
<ฐานข้อมูล>
<เพิ่มชื่อ = "pubs" ConnectionStringName = "pubsConString" pollTime = "900"/>
</ฐานข้อมูล>
</sqlCacheDependency>
</แคช>
</system.เว็บ>
ต่อไปนี้เป็นโค้ดทดสอบ เมื่อเพจถูกโหลด โค้ดต่อไปนี้จะถูกดำเนินการ:
protected void Page_Load(object sender, EventArgs e) {
ถ้า (HttpContext.Current.Cache["xxx"] == null) {
SqlCacheDependency d = new SqlCacheDependency("pubs", "authors");//pubs คือ pubs ที่ระบุในส่วนฐานข้อมูล ตามด้วยชื่อตาราง
HttpContext.Current.Cache.Insert("xxx", "xxx", d);
Response.Write("สร้างค่าแคชใหม่เป็น xxx");
-
อื่น{
Response.Write("โหลดข้อมูลจากแคชค่าคือ "+HttpContext.Current.Cache["xxx"].ToString());
-
-
เมื่อเปิดครั้งแรกหน้านี้จะแสดง:
สร้างค่าแคชใหม่เป็น xxx
หลังจากรีเฟรชเพจแล้ว จะแสดง:
โหลดข้อมูลจากแคช ค่าคือ xxx
เมื่อใช้ตัววิเคราะห์แบบสอบถามเพื่อแก้ไขข้อมูลในผู้เขียนและรีเฟรชหน้าอีกครั้งจะแสดง:
สร้างค่าแคชใหม่คือ xxx
ซึ่งแสดงว่าแคชทำงานได้ตามปกติ เมื่อตารางผู้เขียนเปลี่ยนแปลง เนื้อหาในแคชจะไม่ถูกต้องโดยอัตโนมัติ และแอปพลิเคชันของฉันจะสร้างออบเจ็กต์แคชขึ้นมาใหม่ด้วย
หมายเหตุ: SqlCacheDependency ประกอบด้วยตัวสร้างสองตัว SqlServer2000 รองรับเพียงสองพารามิเตอร์เท่านั้น และพารามิเตอร์หนึ่งตัวรองรับ SqlServer2005