首页 > 解决方案 > 防止多个请求访问 GemFire 缓存的条目

问题描述

我有一个使用 Springboot、Gemfire 和 MySQL 的应用程序。Springboot 应用程序用作休息 api。我想“锁定”缓存条目,以便一次只有一个发送到 rest api 的请求可以访问 GemFire 中的某个条目。在条目所有者释放所有权之前,其他人不能对该条目进行 CRUD。到目前为止,我有两种方法。

方法 1 - 创建一个 GemFire 函数,该函数在 rest api(在不同时间)使用 org.apache.geode.cache.Region.getDistributedLock 调用时对条目执行锁定/解锁。

方法 2 - 创建一个区域(例如 Lock),在第一次访问目标区域(例如 Customer)的条目时创建一个条目。当第二个请求想要访问同一个条目时,rest api 首先检查区域锁定。如果区域 Lock 中不存在密钥,Rest api 会从区域 Customer 检索并返回条目。否则,将不返回任何条目。一旦第一个请求者完成,rest api 将删除 region Lock 中的条目。

我想知道除了这两个选项之外是否还有其他选择。

标签: gemfire

解决方案


如果您想要一个更节省空间的解决方案,您可以在值中添加一个布尔字段以指示它是否被锁定。然后,您也可以使用 region.replace(K,V,V) 有效地设置条目上的“锁定”。虽然,这会将您的锁定问题泄漏到您的业务对象中。


推荐阅读