我正在开发部署了不同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将首先删除第一个更改。
所以我的确切问题是,解决并发地图访问问题的模式是一种高效的方式(没有整个对象锁定)。
此致
答案 0 :(得分:0)
这对我来说听起来有点奇怪,因为这种情况应该只有当两个并发请求使用同一个会话时才有可能。这怎么可能?
但无论如何,您可以对网络会话数据使用TRANSACTIONAL
缓存。这将保证这两个请求将在锁中处理,数据将以原子方式更新。
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="web-sessions-cache"/>
<property name="atomicityMode" value="TRANSACTIONAL"/>
</bean>