2010-11-04 33 views
2

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é.

Répondre

3

Cela le fait:

cacheGetSession(cacheName, true).removeAll() 

Avec environ 10K + l'enregistre en 60 ms retourné.

Pour votre information: cachGetSession() est est le goulot d'étranglement fonction ColdFusion 9.0.1

1

Je n'ai pas testé cela, mais est-ce plus rapide? Juste au cas où ArrayToList() est le goulot d'étranglement.

<cfloop index="cache" array="#cacheGetAllIds(cacheName)#"> 
    <cfset cacheRemove(cache, false, cacheName)> 
</cfloop> 

Référence: http://www.aaronwest.net/blog/index.cfm/2009/11/28/14-Days-of-ColdFusion-9-Caching-Day-12--Removing-All-Items-in-Cache

Si la performance est vraiment un problème pour vous, un rapport de bug? http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html

+0

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

+1

Souhaitez-vous définir cacheSetProperties ({maxElementsInMemory = 0}, cacheName) puis le restaurer au format travail? – Henry

+0

+1 pour une idée intéressante sur la définition des propriétés. – orangepips