Как сгенерировать уникальные ключи для кэширования элементов в ColdFusion

Я разместил аналогичный вопрос на форумах сообщества Adobe, но было предложено задать его и здесь.

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

Поскольку мне нужно, чтобы каждый отдельный запрос кэшировался и легко извлекался, я решил хэшировать параметры запроса в уникальную строку, которую буду использовать в качестве ключа кэша для каждого запроса. Вот подход, который я пробовал до сих пор:

  1. Создайте структуру, содержащую пары ключ-значение параметров (имя параметра, значение параметра).
  2. Преобразуйте структуру в строку, используя SerializeJSON().
  3. Хэшируйте строку с помощью Hash().

Есть ли смысл в этом подходе? Мне интересно, как другие подошли к генерации ключей кэша. Кроме того, подходит ли для этой цели алгоритм «MD5», и будет ли он гарантировать генерацию уникального ключа, или мне нужно использовать «SHA»?


person Carl Von Stetten    schedule 21.12.2012    source источник


Ответы (1)


ОБНОВЛЕНИЕ: используйте атрибут cacheRegion, представленный в CF10!

http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

Тогда все, что вам нужно сделать, это указать cachedAfter или cachedWithin и забыть о том, как генерировать уникальные ключи. CF сделает это за вас, «хэшируя»:

  • запрос "Имя"
  • Оператор SQL
  • Источник данных
  • Имя пользователя и пароль
  • DBTYPE

ссылка: http://www.coldfusionmuse.com/index.cfm/2010/9/19/safe.caching

Я думаю, что это было бы самым простым, если вам действительно не нужно получать определенный запрос по ключу, тогда вы можете передать свой собственный хеш, используя cacheID, еще один новый атрибут, введенный в CF10.

person Henry    schedule 22.12.2012
comment
Генри, для моего конкретного приложения мне нужно иметь возможность сбрасывать эти конкретные кешированные запросы отдельно от других кешированных запросов. В противном случае я бы сделал, как вы предложили, и просто использовал встроенное кэширование запросов. - person Carl Von Stetten; 22.12.2012
comment
@cfvonner хорошие новости, cfquery поддерживает cacheRegion! Ответ обновлен - person Henry; 22.12.2012