2011-07-18 5 views
0

Я читал о перехватчиках и АОП, как они могут разгладить ваш код и экстернализировать сквозные проблемы в аспектах. Я сразу же подумал о CDI и использовании пользовательских перехватчиков для доступа к кешу каждый раз, когда вы пытаетесь получить доступ к базе данных. Есть ли библиотека, которая уже реализует это и поддерживает memcache? Я думаю, что призывы к сугун-объекту должны быть перехвачены.CDI-перехватчики и memcache

+0

Вы можете попробовать [Припой] (http://seamframework.org/Seam3/Solder) – Shahzeb

ответ

3

ИМХО, если вы хотите пойти именно так, вам нужна довольно веская причина, чтобы оправдать, почему Hibernate Cache/JBoss Cache (просто гадать о вашем стеке технологий, но есть продукты/решения практически для всех стеков) не будет подходит вам?

Вы, конечно же, не хотите изобретать колесо с точки зрения разработки собственного кеша запросов или объектов, не так ли?

+0

Ян, спасибо за ваш ответ. Я, конечно, не хочу изобретать колесо, и я не так много смотрел в кеш-гибернате, я был знаком с memcache tho. Я рассмотрю его как можно скорее и посмотрю, соответствует ли он моим потребностям. – arg20

+1

hibernate может использовать memcached как кеш, кстати – Dustin

1

В общем, использование memcached для непосредственного избежания запросов БД очень сложно получить правильно и неэффективно. Вы действительно хотите кэшировать концепции более высокого уровня, такие как границы DAO -> DTO.

Я использовал AOP для того, чтобы успешно внедрить недействительность кэша и код управления наблюдателем в java-программах. AOP позволяет мне думать о другом наборе повторного использования разных частей моего кода. Это не значит, что мне не нужно проектировать эти аспекты, но это освобождает меня от ограничений и мешает мне вырезать и вставлять и т. Д.

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

+0

Дастин, мне немного сложно понять ваше предложение, не могли бы вы рассказать подробнее? Моя первоначальная идея состояла в том, чтобы перехватить вызовы в entitymanager, эти перехватчики проверили, были ли запрошенные объекты уже в кеше, и если они не будут обращаться к базе данных, иначе объекты будут извлекаться из кеша, что делает использование memcache полностью прозрачным , Разве это не очень хорошая идея? – arg20

+0

Кроме того, стоит ли использовать перехватчики? Весь смысл использования кеша - избегать запросов к базе данных, чтобы вы могли достичь большей производительности, но если декораторы/перехватчики добавляют заметные накладные расходы, это усиление будет потрачено впустую. – arg20

+1

Точка кеша не должна избегать запросов к базе данных. Точка кеша - запоминать дорогостоящую работу. Это часто связано с базой данных, но обычно не напрямую результаты запроса к базе данных. - Насколько ваша методология звучит, она может определенно работать, хотя недействительность будет сложнее. См. Ответ jan groth. :) – Dustin