使用Hazelcast实现写后缓存

时间:2020-10-12 07:15:20

标签: caching hazelcast

我正在使用Hazelcast在“后写式缓存” 上进行PoC。

假设我有两个服务/微服务:

  1. HZServer ”(在端口9091、9092、9093上运行)。我在此服务中包括以下依赖项:
  • 'com.hazelcast:hazelcast-all:4.0.3'
  • 'org.springframework.boot:spring-boot-starter-data-jpa'

    我已经在此服务中实现了MapStore并使用CRUDRepository连接到 PostgreSQL 。只有HZServer将与数据库通信。 我已经将此配置为Hazelcast服务器。另外,如果我的理解是正确的,则Hazelcast在此处作为嵌入式服务器运行。 定义了一个名为“ Country”的MapConfig及其MapStoreConfig实现“ CountryMapStore”。
  1. MyClient ”(在端口8081、8082、8083 ...上运行)。我在此服务中包括以下依赖项:
  • 'com.hazelcast:hazelcast-all:4.0.3'(我本可以只使用hazelcast-client)。

    我已使用“ Hazelcast-client.yaml”将其配置为Hazelcast客户端。我还在MyClient服务中定义了一些RestControllers。因此,MyClient服务将仅与HZServer(缓存)通信,而不与DB通信。我正在以以下方式从HZInstance获取“国家”地图:
    IMap<String, Country> iMap = hazelcastInstance.getMap("Country");

    通过以下方式获取和放置键值对:
    Country country = iMap.get(code); // Fetching
    iMap.put(code, country); // Inserting or Updating

请建议我,这是否是在Hazelcast中实现“写后”缓存的唯一方法? 请在下面找到架构图:

HZ PoC Architecture

1 个答案:

答案 0 :(得分:0)

非常详细的上下文,这很棒!

真正的“后写”表示Hazelcast服务器与数据库之间的交互是异步的。因此,这取决于MapStore的确切配置。

请注意,在这种情况下,您可能会丢失数据。同样,这取决于您的具体实现(例如,您可以重试直到确认交易为止)。