ما هي أفضل طريقة لفرض انتهاء صلاحية ذاكرة التخزين المؤقت في ASP.NET؟
-
22-08-2019 - |
سؤال
لنفترض أن لدي تطبيق ASP.NET يعمل عبر عدة خوادم ويب خلف موازن التحميل:
هل استطيع:
هل يجب إجبار OutputCache (مستوى الصفحة و/أو التحكم) على الانتهاء عالميًا؟
فرض ذاكرة التخزين المؤقت للبيانات (أيCache.Insert) هل تنتهي صلاحيتها؟
مراقبة استخدام التخزين المؤقت لـ ASP.NET (المفاتيح، ذاكرة الوصول العشوائي، إلخ) من موقع مركزي؟
أحد الحلول الممكنة هو جعل كل استخدام لذاكرة التخزين المؤقت يتحقق من تبعية الملف بحثًا عن التغييرات.يمكن لمس الملف مما قد يؤدي إلى انتهاء صلاحية كل ذاكرة التخزين المؤقت.ومع ذلك، يتطلب هذا من المطورين تضمين التبعية في جميع التعليمات البرمجية الخاصة بهم.هل لهم حل أفضل؟
المحلول
هناك العديد من الطرق لجعل هذه التخزين المؤقت تنتهي صلاحيتها، مثل ذاكرة التخزين المؤقت للصفحة
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
التبعية المستندة إلى الوقت تؤدي ببساطة إلى انتهاء صلاحية العنصر في وقت محدد.
Response.Cache.SetExpires(DateTime.Now.AddSeconds(360));
Response.Cache.SetCacheability(HttpCacheability.Private)
Response.Cache.SetSlidingExpiration(true);
الآن عندما يتعلق الأمر بمراقبة ذاكرة التخزين المؤقت، ما لم تكن هناك واجهة برمجة تطبيقات على ذاكرة التخزين المؤقت لإخبارك، فلا توجد طريقة مباشرة.
يمكنك بالطبع تعداد ذاكرة التخزين المؤقت وأزواج القيمة الرئيسية ثم حساب حجم كل عنصر مخزن.لا يبدو الأمر سهلاً أليس كذلك؟؟
لذا هنا لتسهيل مراقبة ذاكرة التخزين المؤقت.أقول بصراحة أنني لم أستخدمه بنفسي مطلقًا، ولكن يمكنك تجربته، فقط مسألة إضافة ملف dll إلى تطبيقك.
وهنا شيء لعرض مفاتيح ذاكرة التخزين المؤقت الخاصة بك،
' display contents of the ASP.NET Cache
If Cache.Count > 0 Then
cc.Append("<b>Contents of the ASP.NET Cache (" _
& Cache.Count.ToString() & " items):</b><br />")
For Each item As Object In Cache
cc.Append("Key:'" & item.Key & "' Type:" _
& item.Value.GetType().ToString() & "<br />")
Next
Else
cc.Append("<b>ASP.NET Cache is empty</b>")
End If
نصائح أخرى
من نصائح تك (اقرأ الرابط للحصول على شرح مفصل)
Response.Expires = 15
Response.ExpiresAbsolute = Now() - 2
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "private"
http://msdn.microsoft.com/en-us/library/y18he7cw(v=vs.100).aspx
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);