В настоящее время я думаю о стратегиях кэширования и, что более важно, избегать дублирования данных в кеше. Мой запрос - это не язык, а агностик, но очень связанный с программированием.Кэширование стратегий с выгружаемыми/отфильтрованными данными
Мой вопрос касается эффективного кэширования выгружаемых или отфильтрованных данных, но более того, распределенного кэширования. Последнее я решил пойти с memcached и, более конкретно, с ним. Я видел другой коммерческий вариант в виде NCache, но memcached кажется мне совершенно приемлемым и, по-видимому, используется на facebook, myspace и т. Д.
Мой запрос - это стратегия, в которой вы можете содержать объекты в кеше и также ссылка на них с постраничными данными. Если у меня есть 100 элементов, и я их создаю, я могу кэшировать идентификаторы продукта 1-10 в кеше и кэшировать каждый продукт отдельно. Если мне нужно сортировать элементы по убыванию, то элементы 1-10 будут разными продуктами, поэтому я бы не захотел хранить фактические объекты каждый раз, когда постраничные данные/сортировка/фильтрация изменились, а вместо этого сохранили идентификаторы объектов, чтобы я мог тогда выполните поиск trabsactional в базе данных, если некоторые из них еще не существуют в кеше или являются недопустимыми.
Моя первоначальная идея была для ключа кеша.
paged_<pageNumber><pageSize><sort><sortDirection>[<filter>]
Я бы тогда перебирать ключи кэш и удалите все, которые начинаются с «paged_» Мой вопрос, в конечном счете, если какой-либо один знает, каких-либо моделей или представлений о straties относительно кэширования таких моделей данных, таких как страничных данных а также убедиться, что объекты не кэшируются более одного раза.
memcached является родным кодом и не будет иметь проблемы с очисткой кэша, как я уже говорил выше, но очевидно, что чем больше элементов в кеше, тем больше времени потребуется. Меня интересует, знает ли кто-нибудь о каком-либо решении или теории для этого типа проблемы, который в настоящее время используется. Я уверен, что будет. Спасибо за ваше время
ТИА
Эндрю
Являются ли страницы динамическими, постоянно ли изменяются данные на каждой странице или они основаны на пользовательском запросе? Является ли приложение уже написанным и слишком медленным, поэтому требуется использование кеша? «Преждевременная оптимизация - это корень всего зла» – Gandalf
Данные изменяются по предварительному набору параметров, а не кэшируются в запросе пользователей. Приложение создается. Это не преждевременная оптимизация, а просто планирование, так как «Невозможно запланировать планирование неудачно ;-)» –
Планирование в порядке, но я бы написал приложение (сохраняя кеширование в глубине вашего разума), а затем протестировал его. Если это не достаточно быстро, добавьте некоторое кэширование через нечто вроде Spring AOP, а не встраивание логики кэширования в код вашего приложения. Это также упростит ответ на этот вопрос, поскольку мы можем увидеть фактический код [или случай использования] и предложить, где кеширование было бы наиболее выгодным. – Gandalf