Squeak.ru - шаблоны программирования

Области кэша и группы кэш-памяти: Memcache, EhCache, JCS

Большинство служб кэширования поддерживают кэширование любого объекта в виде пары ключ-значение. Но я ищу способ кэширования объектов как регионов или групп. Это означает, что объекты кэширования должны иметь возможность группироваться. Один или несколько объектов кэшируются в группе. Что бы мы ни делали (удаляли, обновляли) в группе, это должно влиять на объекты в группе.

Я искал некоторые службы кэширования и обнаружил, что JCS поддерживает это. Я должен реализовать общий способ, поскольку его можно использовать для большинства служб кэширования. Кто-нибудь знает какой-либо способ или вспомогательный ресурс, который может быть полезен?

Редактировать: @ cruftex: предположим, что для небольшого магазина используется система инвентаризации. Есть канцтовары, овощи, фрукты, сладости и их цены и другие реквизиты требуют кеширования. Что делать, если мне нужно очистить или сделать какое-либо обновление только для предметов, которые можно есть (овощи, фрукты, сладости), а не для канцелярских принадлежностей и любого другого несъедобного набора объектов, которые кэшируются? Если есть способ сгруппировать, например, «съедобные», «несъедобные», я могу получить или внести какие-либо изменения в конкретную группу, чтобы это повлияло на все экземпляры членов группы.


  • Не могли бы вы уточнить, как вы хотите получить доступ к отдельным объектам в вашей группе? Почему это не просто Cache‹String,Set‹Object››? Строковый ключ является идентификатором вашей группы. 11.03.2014
  • @cruftex: Спасибо за ответ, и вы можете прочитать мою правку, пожалуйста. 11.03.2014
  • Я все еще не понимаю. Как вы обращаетесь к группам или к части групп? Какой у вас шаблон доступа? 12.03.2014
  • @круфтекс. Я отредактировал с практическим примером. Посмотрите, пожалуйста. Непонятно, что вы имели в виду под «шаблоном доступа». 12.03.2014
  • Под шаблоном доступа я имею в виду, что является ключом к вашим объектам и какие операции вы выполняете над ними, например. в основном добавление объекта в конец группы или просто выполнение точечных запросов по идентификатору продукта. 12.03.2014
  • Couchbase — это база данных и кеш, проверьте это 25.07.2021

Ответы:


1

На данный момент я не вижу, оправдывает ли ваш сценарий использования специальную функцию кэширования.

  1. Если вы обновляете свои продукты в конфигурации сквозной записи через Cache.put(), кеш автоматически синхронизируется.

  2. Если вы используете слой сохранения, например. JPA, его внутренний кеш также синхронизирован.

  3. Если вы сами отвечаете за управление кешем, вам просто нужно знать, какие объекты принадлежат группе, и выполнить аннулирование, например:

    Cache<Integer,Set<Integer>> groupId2productsId = ....
    Cache<Integer, Product> productId2product = ....
    
    void invalidateGroup(int id) {
      productId2product.removeAll(groupId2productsId.get(id));
    }
    
  4. Конечно, вы можете разделить свои продукты на несколько кешей (или регионов). Затем я бы сделал алгоритм разделения поверх обычного кеша. Но это негибкий подход, если у вас более одного критерия разделения или у вас есть совпадения, то у вас проблемы.

Общее замечание: Для адресации группы объектов по критерию нужна структура индекса, либо перебирать все подряд. Обычно это работа базы данных. EHCache имеет встроенную функцию поиска, поэтому вы можете запрашивать объекты в своем кеше и аннулировать их, но я сомневаюсь, что EHCache имеет быструю/индексированную реализацию. Я подумаю, есть ли смысл помещать что-то подобное в кеш, однако это не будет "стандартным" решением.

12.03.2014
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

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

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...