Y at-il un moyen plus rapide pour effacer une cache personnalisée à l'aide de l'objet cacheGetSession?
-
29-09-2019 - |
Question
Je sais que je peux utiliser les API de cache ColdFusion aux données claires en tant que tel:
<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>
Mais dans la pratique la récupération de tous les IDs (à savoir cacheGetAllIds()
) pour faire la suppression est lente (par exemple secondes). Où je pense qu'il devrait y avoir une façon si je commence complètement sur d'avoir cela se produire en millisecondes. Dans mon cas particulier, le cache personnalisé est disque persistant et peut être 100s de méga-octets sur le disque.
Je suis soupçonner qu'il ya un moyen plus rapide pour effacer ceci en utilisant des méthodes sur cacheGetSession()
, peut-être conjointement avec les API ColdFusion. Donc, demander de voir si quelqu'un a une certaine connaissance de la façon de le faire, et rendent heureux ColdFusion en même temps, avant que je commence à regarder sous le capot moi.
Mise à jour
On dirait qu'il pourrait être possible d'utiliser cacheGetSession (cacheName, true) .REMOVEALL () parce que l'objet retourné est de type net.sf.ehcache.Cache , qui met en œuvre net.sf.ehcache .Ehcache . Et cette interface spécifie un removeAll () méthode. Je n'ai pas encore essayé cependant.
La solution
le fait:
cacheGetSession(cacheName, true).removeAll()
Avec environ 10K + enregistrements, il est retourné en 60 ms.
FYI: cachGetSession () est une fonction ColdFusion 9.0.1
Autres conseils
Je n'ai pas testé, mais est-ce plus vite? Juste au cas où ArrayToList()
est le goulot d'étranglement.
<cfloop index="cache" array="#cacheGetAllIds(cacheName)#">
<cfset cacheRemove(cache, false, cacheName)>
</cfloop>
Si la performance est vraiment un problème pour vous, un rapport de bug? http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html