如何在MapStore中使用Hazelcast

时间:2015-10-21 14:19:24

标签: caching hazelcast

我正在使用Hazelcast作为我的应用程序的缓存解决方案。 我的应用程序对数据库的插入和更新很少,这些也需要同步到Cache。

我想使用MapStore功能,这样当我做IMap.put()时,Hazelcast负责在底层Db中持久化Object并更新其缓存。

在重写的商店实现中,我想以下面的方式调用我的DAO来保存数据。

public void store(Long key, Product value)
    {
        log.info("Storing Data for Employee {} in Database using DataStore ",     value);
    Long employeeId = employeeDao.create(value);
    value.setId(employeeId );

}

下面列出的问题很少: - 1)在put调用中,我想使用“key”作为“employeeId”,但只有在Db中为此记录插入后才会生成此密钥。那么当我没有Id时,如何进入缓存。我希望Hazelcast使用作为商店方法调用(或任何其他方式)的一部分生成的“id”作为我的Object的键。

  

Imap.put(key,new Employee(“name_of_Employee”,“age_of_employee”))

2)MapStore实现的store方法返回一个void,因此我无法将为此Object生成的Id返回给Client。我怎样才能做到这一点? 我尝试在Map上使用MapEntryListeners但是添加回调的条目不会返回新的Object。我还将PostProcessingMapStore接口添加到我的MapStore,但无法将新值返回给客户端。

请咨询

1 个答案:

答案 0 :(得分:2)

您有两个选择:

1)在数据库外部生成employeeId。您可以使用Hazelcast中的IdGenerator来执行此操作。

2)如果必须让数据库生成id,那么在将Employee存储在数据库中之后,需要手动将map放入缓存中。