Запретить доступ к кешу GemFire ​​по нескольким запросам - PullRequest
0 голосов
/ 11 октября 2018

У меня есть приложение, использующее Springboot, Gemfire и MySQL.Приложение Springboot служит API отдыха.Я хочу «заблокировать» запись в кеше, чтобы только один запрос, отправленный в остальные API, мог получить доступ к определенной записи в GemFire ​​одновременно.Другие не могут делать CRUD для этой записи, пока владелец записи не освободит владение.У меня есть два подхода на данный момент.

Подход 1 - Создайте функцию GemFire, которая выполняет блокировку / разблокировку записи при ее вызове с помощью остальных API (в другое время) с использованием org.apache.geode.cache.Region.getDistributedLock.

Подход 2 - Создание региона (например, Блокировка), в котором запись создается при доступе к записи целевого региона (например, Клиент) в первый раз.Когда 2-й запрос хочет получить доступ к той же записи, остальные API сначала проверяют блокировку региона.Rest api извлекает и возвращает запись из региона Customer, если ключ не существует в регионе Lock.В противном случае, запись не будет возвращена.Как только первый запросчик завершает работу, rest api удаляет запись в области Lock.

Мне интересно, есть ли альтернативы, кроме этих двух вариантов.

1 Ответ

0 голосов
/ 11 октября 2018

Если вы хотите более экономичное решение, вы можете добавить логическое поле к значению, чтобы указать, было ли оно заблокировано.Затем вы можете использовать region.replace (K, V, V), чтобы также эффективно установить «блокировку» для записи.Хотя это приведет к тому, что ваши проблемы с блокировкой попадут в ваши бизнес-объекты.

...