Кэширование и очистка в прокси с отношениями между вызовами прокси - PullRequest
0 голосов
/ 27 января 2009

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

Это становится более сложным, когда дело доходит до очистки кэша, так как не очевидно, какие элементы очищать при изменении элемента. если объект A содержится в наборе узлов B и объект A изменяется, как мы узнаем, что набор узлов B устарел.

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

Есть ли лучший / стандартный способ справиться с такими ситуациями.

1 Ответ

1 голос
/ 27 января 2009

Разве это не та вещь, которую можно (и нужно) обрабатывать с помощью шаблона Observer? А именно, B должен слушать события, которые влияют на его живость, в этом случае состояние A.

Карта - довольно естественная абстракция для кеша, и именно так это делают Oracle Coherence и Terracotta. Согласованность, с которой я гораздо более знаком, имеет механизмы для прослушивания событий кэширования в целом или для конкретных узлов. Это, вероятно, то, что вы должны подражать.

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

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

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