สิ่งที่ฉันเขียนก่อนหน้านี้: บทความนี้ยังคงเกี่ยวข้องกับ ASP ฉันเชื่อว่าทุกคนที่เล่น ASP รู้สึกเช่นนี้ เมื่อมีข้อมูลมากกว่า 50,000 ชิ้น - เช่นเดียวกับเครือข่ายเพลง 10 ชิ้นล่าสุดจะต้องถูกเรียกและแสดงบน ,สิ่งที่ไม่ดีคือเมื่อไม่มีผู้ใช้หลายรายเปิดเพจเพื่อเข้าถึง ผู้ใช้แต่ละคนจะต้องอ่านฐานข้อมูลครั้งละครั้ง ซึ่งไม่ต้องสงสัยเลยว่าหากสามารถบันทึกข้อมูลลงในหน่วยความจำแล้วจึงอ่านได้ ไม่ต้องสงสัยเลยว่าแคชนั้นจะช่วยเร่งกระบวนการให้เร็วขึ้นอย่างแน่นอน จริงๆ แล้วสิ่งที่เรียกว่าแคชคือการเปิดพื้นที่ในหน่วยความจำเพื่อบันทึกข้อมูล เมื่อใช้แคช คุณจะไม่ต้องเข้าถึงข้อมูลที่คุณบันทึกไว้ในฮาร์ดดิสก์บ่อยๆ เพราะเราหวังว่า ที่ผู้ใช้ทุกคนสามารถเห็นข้อมูลนี้ เอฟเฟกต์จะเหมือนกัน พิจารณาใช้วัตถุแอปพลิเคชันเนื่องจากเป็นวัตถุทั่วไปสำหรับผู้เยี่ยมชมทุกคน แอปพลิเคชันในตัวเกี่ยวกับแอปพลิเคชัน มี 2 วิธีหนึ่ง [ล็อคและปลดล็อค] สองคอลเลกชัน [เนื้อหาและวัตถุคงที่] สองเหตุการณ์ [application_onstart และ application_end] ตัวแปรแอปพลิเคชันจะไม่หายไปเนื่องจากผู้ใช้ออก มันจะรอจนกว่าเว็บไซต์จะปิดและถอนการติดตั้งโปรแกรม ด้วยเหตุนี้คุณจึงต้องระมัดระวังเป็นพิเศษเมื่อใช้งาน มิฉะนั้นจะกินพื้นที่หน่วยความจำ ตรวจสอบข้อมูลที่เกี่ยวข้อง ประมาณนี้ เรากำลังเขียนข้อมูลลงในแอปพลิเคชันที่กำหนดเอง แนวคิดทั่วไปคือการอ่านและรีเฟรชตามเวลาที่กำหนด
ขั้นแรกให้สร้างฐานข้อมูลอย่างง่ายเพื่ออ่าน และเขียนลงในอุณหภูมิตัวแปร dim:
ต่อไปนี้เป็นส่วนอ้างอิง:
ฟังก์ชั่น DisplayRecords()
'แต่เดิมฟังก์ชันนี้กำหนดค่าที่บันทึกไว้ Dim sql, conn, rs ให้กับอุณหภูมิที่แปรผัน
'คำสั่ง sql แบบมีเงื่อนไข sql = "SELECT id, [szd_f], [szd_t] จากผู้ดูแลระบบ"
'เปิดการเชื่อมต่อฐานข้อมูล Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={ไดรเวอร์ Microsoft Access (*.mdb)}; DBQ="&Server.MapPath("db.mdb")
ตั้ง rs = Server.CreateObject("ADODB.Recordset")
rs.เปิด sql, conn, 1, 3
'เมื่อข้อมูลที่ตรงกับคำสั่ง sq l ไม่ได้ถูกแสดง ถ้าไม่ใช่ rs.EOF จากนั้น
'กำหนด Dim temp ให้กับตัวแปร temp
อุณหภูมิ = "<ความกว้างของตาราง=""90%"" align=""center"""
อุณหภูมิ = อุณหภูมิ & " border=""1"" bordercolor=""silver"""
อุณหภูมิ = อุณหภูมิ & " cellspacing=""2"" cellpadding=""0"">"
อุณหภูมิ = อุณหภูมิ & "<tr bgcolor=""#CCDDEE""><td width=""5%"""
temp = temp & ">ID</td><td>การทำงาน</td>"
อุณหภูมิ = อุณหภูมิ & "<td>หมายเลข</td></tr>"
ในขณะที่ไม่ใช่ rs.EOF
อุณหภูมิ = อุณหภูมิ & "<tr><td bgcolor=""#CCDDEE"">"
อุณหภูมิ = อุณหภูมิ & rs("ID") & "</td><td>" & rs("szd_f")
อุณหภูมิ = อุณหภูมิ & "</td><td>" & rs("szd_t")
อุณหภูมิ = อุณหภูมิ & "</td></tr>"
rs.MoveNext
เวนด์
อุณหภูมิ = อุณหภูมิ & </table>"
'หลังจากการกำหนดอุณหภูมิเสร็จสิ้น ให้ส่งคืนฟังก์ชัน DisplayRecords = temp'
อื่น
DisplayRecords = "ไม่มีข้อมูล"
สิ้นสุดถ้า
'ปล่อยหน่วยความจำ rs.Close'
เชื่อมต่อปิด
Setrs=ไม่มีอะไร
ตั้งค่าคอน = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ตกลง ฟังก์ชั่นด้านบนถูกแปลงแล้ว และเมื่อเรียกจะเป็น DisplayRecords
นี่คือจุดที่แอปพลิเคชันเข้ามามีบทบาท:
'ฟังก์ชันนี้คือการเขียนลงในแคช Function DisplayCachedRecords(Secs)
หรี่ retVal, datVal, temp1
'Secs คือเวลาในการรีเฟรชข้อมูลในแต่ละครั้ง retVal คือข้อมูล datVal คือเวลาที่เหลืออยู่ retVal = Application("cache_demo") 'รับค่าของ application datVal = Application("cache_demo_date") 'รับค่าของ application ' ตัดสินค่าของ datVal นั่นคือเพื่อคำนวณว่าเวลาผ่านไปแล้วหรือไม่ ถ้า datVal = "" จากนั้น
'หากว่างเปล่า ค่า datVal คือเวลาปัจจุบันในหน่วยวินาทีบวกกับเวลาที่กำหนดโดยวินาที datVal = DateAdd("s",Secs,Now)
สิ้นสุดถ้า
'temp1 คือความแตกต่างที่สองระหว่างเวลาปัจจุบันกับ datVal temp1 = DateDiff("s", Now, datVal)
'หาก retVal เป็นค่าตอบแทนของฟังก์ชันข้างต้นอยู่แล้ว และเวลาจะมากกว่า 0
ถ้า temp1 > 0 และ retVal <> "" จากนั้น
'ฟังก์ชันนี้ส่งคืนจำนวนเรกคอร์ด DisplayCachedRecords = retVal
Response.Write "<b><font color=""green"">ใช้แคชเพื่ออ่านข้อมูล"
Response.Write " ... (" & temp1 & " วินาทีที่เหลือ)</font></b>"
ตอบกลับเขียน "<br><br>"
อื่น
หาก 'retVal ว่างเปล่า ให้กำหนดค่าของ DisplayRecords ให้กับตัวแปร temp2
หรี่อุณหภูมิ2
temp2 = DisplayRecords()
'บันทึกลงในแอปพลิเคชัน -------------------->โฟกัส Application.Lock
แอปพลิเคชัน ("cache_demo") = temp2
Application("cache_demo_date") = DateAdd("s",วินาที,ตอนนี้)
แอปพลิเคชั่นปลดล็อค
DisplayCachedRecords = temp2
' เวลาที่ผ่านมาของแคชที่บันทึกไว้จะถูกเขียนแบบไม่เป็นทางการที่นี่ และความแตกต่างที่สัมพันธ์กับจำนวนวินาทีทั้งหมดคือ:
Response.Write "<b><font color=""red"">รีเฟรชการแสดงแคช..."
ตอบกลับเขียน "</font></b><br><br>"
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
%>
คำอธิบายเสร็จสมบูรณ์
ต่อไปนี้เป็น
วิธีการเรียกโค้ดที่ไม่มีเครื่องหมายข้อคิดเห็นที่สมบูรณ์: <%=DisplayCachedRecords(20)%>
เขียนไว้ตอนท้าย: หากคุณรู้สึกว่าหน่วยความจำเซิร์ฟเวอร์ของคุณไม่ใหญ่พอ อย่าใช้จำนวนมาก แคช