我有一个使用Springboot,Gemfire和MySQL的应用程序。 Springboot应用程序用作rest api。我想“锁定”缓存条目,以便一次发送给rest api的请求可以一次访问GemFire中的某些条目。在条目所有者释放所有权之前,其他人无法对该条目执行CRUD。到目前为止,我有两种方法。
方法1-创建一个GemFire函数,当它由休息api(在不同时间)使用org.apache.geode.cache.Region.getDistributedLock调用时,该条目将对条目执行锁定/解锁。
方法2-创建一个区域(例如,锁),当第一次访问目标区域(例如,客户)的条目时,将在其中创建条目。当第二个请求想要访问相同的条目时,其余api首先检查区域Lock。如果密钥在区域锁中不存在,则Rest api从区域客户检索并返回条目。否则,将不会返回任何条目。一旦第一个请求者完成,rest api就会删除区域Lock中的条目。
我想知道除了这两个选项之外是否还有其他选择。
答案 0 :(得分:0)
如果要使用节省空间的解决方案,可以在值中添加一个布尔字段以指示其是否被锁定。然后,您也可以使用region.replace(K,V,V)来有效地设置条目上的“锁定”。但是,这会将您的锁定问题泄漏到业务对象中。