هل هناك طريقة أسرع لمسح ذاكرة التخزين المؤقت المخصصة باستخدام كائن CacheGetSession؟
-
29-09-2019 - |
سؤال
أعلم أنه يمكنني استخدام واجهات برمجة تطبيقات Coldfusion Cache لمسح البيانات على هذا النحو:
<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>
ولكن في الممارسة العملية استرداد جميع الهوية (أي cacheGetAllIds()
) للقيام بالحذف بطيء (مثل الثواني). حيث أفكر في أنه يجب أن يكون هناك طريقة إذا بدأت تمامًا في حدوث ذلك بالميلي ثانية. في حالتي الخاصة ، يكون ذاكرة التخزين المؤقت المخصصة مستمرة ويمكن أن تكون 100s من Megabytes على القرص.
أشك في أن هناك طريقة أسرع لمسح ذلك باستخدام الأساليب cacheGetSession()
, ، ربما بالتزامن مع واجهات برمجة تطبيقات Coldfusion. لذا طلب معرفة ما إذا كان لدى شخص ما بعض المعرفة بكيفية القيام بذلك ، و اجعل Coldfusion سعيدًا في نفس الوقت ، قبل أن أبدأ في النظر إلى الغطاء بنفسي.
تحديث
يبدو أنه قد يكون من الممكن استخدامه cachegetsession(Cachename ، True) .removeall () لأن الكائن الذي تم إرجاعه من النوع net.sf.ehcache.cache, الذي ينفذ net.sf.ehcache.ehcache. وهذه الواجهة تحدد طريقة إزالة (). لم تجربها بعد.
المحلول
هذا يفعل:
cacheGetSession(cacheName, true).removeAll()
مع حوالي 10K+ سجلات عادت في 60 مللي ثانية.
لمعلوماتك: CachgetSession () هي وظيفة Coldfusion 9.0.1
نصائح أخرى
لم أختبر هذا ، لكن هل هذا أسرع؟ فقط في حالة ArrayToList()
هو عنق الزجاجة.
<cfloop index="cache" array="#cacheGetAllIds(cacheName)#">
<cfset cacheRemove(cache, false, cacheName)>
</cfloop>
إذا كان الأداء يمثل مشكلة بالنسبة لك ، فاطلب تقرير الأخطاء؟ http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html