我正在使用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,但无法将新值返回给客户端。
请咨询
答案 0 :(得分:2)
您有两个选择:
1)在数据库外部生成employeeId
。您可以使用Hazelcast中的IdGenerator来执行此操作。
2)如果必须让数据库生成id,那么在将Employee
存储在数据库中之后,需要手动将map
放入缓存中。