Je sais que je peux utiliser les API de cache ColdFusion pour effacer les données en tant que tel:Existe-t-il une méthode plus rapide pour effacer un cache personnalisé à l'aide de l'objet cacheGetSession?
<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>
Mais dans la pratique récupérer toutes les ids (à savoir cacheGetAllIds()
) pour faire la suppression est lente (par exemple secondes). Où je pense qu'il devrait y avoir un moyen si je recommence complètement à faire cela en millisecondes. Dans mon cas particulier, le cache personnalisé est disque persistant et peut être 100s de mégaoctets sur le disque.
Je soupçonne qu'il existe un moyen plus rapide d'effacer cela en utilisant des méthodes sur cacheGetSession()
, peut-être en conjonction avec les API ColdFusion. Donc, en demandant si quelqu'un sait quelque chose, et rendront ColdFusion heureux en même temps, avant de commencer à regarder sous le capot.
Mise à jour
On dirait qu'il pourrait être possible d'utiliser cacheGetSession (cacheName, true) .REMOVEALL() parce que l'objet renvoyé est de type net.sf.ehcache.Cache, qui met en œuvre net.sf.ehcache.Ehcache. Et cette interface spécifie une méthode removeAll(). Je n'ai pas encore essayé.
de cacheGetAllIds() - en fait, si vous regardez l'API docs sur l'objet Cache pour getNames() décrit l'algorithme de recherche comme O (n) 8ms par 1000 entrées, ce que je vois est plus lent - 2000ms + pour plus de 10.000 entrées. – orangepips
Souhaitez-vous définir cacheSetProperties ({maxElementsInMemory = 0}, cacheName) puis le restaurer au format travail? – Henry
+1 pour une idée intéressante sur la définition des propriétés. – orangepips