Есть ли более быстрый способ очистки пользовательского кэша с помощью объекта cacheGetSession? - PullRequest
2 голосов
/ 04 ноября 2010

Я знаю, что могу использовать API-интерфейсы кеша ColdFusion для очистки данных следующим образом:

<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>

Но на практике извлечение всех идентификаторов (т. Е. cacheGetAllIds()) для удаления выполняется медленно (например, в секундах).Где я думаю, должен быть способ, если я полностью начинаю, чтобы это произошло за миллисекунды.В моем конкретном случае пользовательский кэш является постоянным на диске и может занимать 100 мегабайт на диске.

Я подозреваю, что есть более быстрый способ выяснить это, используя методы на cacheGetSession(), возможно, в сочетании с API ColdFusion.Поэтому, спрашивая, есть ли у кого-то знания о том, как это сделать, и делают ColdFusion одновременно счастливым, прежде чем я сам начну заглядывать под капот.

Обновление

Похоже, можно использовать cacheGetSession (cacheName, true) .removeAll (), поскольку возвращаемый объект имеет тип net.sf.ehcache.Cache , который реализует net.sf.ehcache.Ehcache .И этот интерфейс указывает метод removeAll ().Хотя еще не пробовал.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

Это делает это:

cacheGetSession(cacheName, true).removeAll()

При примерно 10K + записях он возвращается за 60 мс.

К вашему сведению: cachGetSession () является функцией ColdFusion 9.0.1

1 голос
/ 04 ноября 2010

Я не проверял это, но это быстрее? На всякий случай ArrayToList() является узким местом.

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

ссылка: http://www.aaronwest.net/blog/index.cfm/2009/11/28/14-Days-of-ColdFusion-9-Caching-Day-12--Removing-All-Items-in-Cache

Если производительность действительно является проблемой для вас, отправьте отчет об ошибке? http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html

...