Apache Ignite中存储的Hashmap的并发问题

时间:2016-11-03 20:07:44

标签: caching concurrency hashmap ignite

我正在开发部署了不同WARS的集群Web应用程序,因此我需要会话共享(而不仅仅是这个)。我已经开始使用Ignite作为群集(复制)缓存服务器的良好平台。 我遇到的问题是: 我的缓存Key是String,Value是HashMap

CacheConfiguration<Integer, Map<String,String>> cfg = new CacheConfiguration<>("my_cache");

我将此缓存用作WEBSESSION。问题是一个servlet获取Map,放置一些特定于会话的值,然后将其放回Ignite。在第一个servlet获得缓存之后,第二个servlet进入并且因为它在第一个servlet之后完成,所以第二个put将首先删除第一个更改。

所以我的确切问题是,解决并发地图访问问题的模式是一种高效的方式(没有整个对象锁定)。

此致

1 个答案:

答案 0 :(得分:0)

这对我来说听起来有点奇怪,因为这种情况应该只有当两个并发请求使用同一个会话时才有可能。这怎么可能?

但无论如何,您可以对网络会话数据使用TRANSACTIONAL缓存。这将保证这两个请求将在锁中处理,数据将以原子方式更新。

<bean class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="web-sessions-cache"/>
    <property name="atomicityMode" value="TRANSACTIONAL"/>
</bean>