Секрет кроется в функции CF 9.0.1 cacheGetSession()
, наряду с изменением других функций, чтобы принять key
в качестве параметра.
Следующий код будет работать только в 9.0.1.
Предполагая, что:
<cfcache action="serverCache" timeout="#CreateTimeSpan(0,0,0,10)#" stripwhitespace="true" usequerystring="true">
Stuff to cache in the default store.
<br/>
<cfoutput>#Now()#</cfoutput>
</cfcache>
<cfcache action="serverCache" key="myCustomCache" timeout="#CreateTimeSpan(0,0,0,10)#" stripwhitespace="true" usequerystring="true">
Stuff to cache in the 'myCustomCache' store.
<cfoutput>#Now()#</cfoutput>
</cfcache>
Доступ к идентификаторам кэша отдельно
По умолчанию (Шаблон):
<cfdump var=#getAllTemplateCacheIds()#>
myCustomCache:
<cfdump var=#cacheGetSession('myCustomCache',true).getKeys()#>
Чтение данных из пользовательского кэша
<cfset keys = cacheGetSession('myCustomCache',true).getKeys() />
<cfcache key="myCustomCache" action="get" name="dataInCache" id="#keys[1]#">
<cfdump var=#dataInCache#>
Очистка пользовательского кэша независимо от значения по умолчанию
<cfset cacheRemove(keys[1],true,'myCustomCache')>
К сожалению, документация не в лучшем виде в том, что касается функциональности, которая появилась в 9.0.1. К счастью, пользовательская база CF хорошо разбирается в этом, а именно: Роб-Брукс Билсон , у которого есть много замечательных статей по CF и кешированию в целом.
Пара предостережений , которые вы должны помнить при работе с кешем следующим образом:
Эти вызовы связаны с EhCache под капотом, которым является Java, и могут возвращать NULL, если вы пытаетесь получить доступ к ключам, которые не существуют. Оберните ваши результаты в IsNull()
для проверки.
cacheGetSession () вводит в заблуждение (как Роб указывает в своем блоге), вы можете подумать , что вы получаете данные кэша, относящиеся к сеансу, так как они применяются к вашему приложению, но это не case - это для всего сервера , и вы увидите другие ключи кеша в среде общего приложения.
Итак, позаботьтесь о сбросе соответствующих данных ...