由于我们的项目从MongoDB读取和写入数据的频率非常高,我们决定将一些数据加载到Redis以减少写入/读取Mongo的请求。
我们将实体的id存储为redis-key,实体的redis-value序列化JSON字符串。存储在Redis中的数据如下:
key : "id_18035138"
value : "{
"id":"...",
...,
"version":1
}
存储这些数据后,当我们需要更新数据时,我们首先将JSON字符串解析为实体,然后更新属性,然后刷新Redis中的数据。所以Redis中的数据将是最新的数据。
当我们需要将Redis数据保存到MongoDB时,我们首先将JSON字符串解析为实体,然后使用Morphia DAO来保存实体,但我们遇到了这个异常:
java.util.ConcurrentModificationException: Entity of class com.lk.game.entities.User (id='...',version='1') was concurrently updated.
我知道这一定是乐观锁定的问题。我们怎么能解决这个并发异常?
感谢您的回答。
答案 0 :(得分:1)
我们怎样才能解决这个并发异常?
不同时写作......显然你至少有两个演员并行写回同一个文件。
我不认为可以通过您提供的信息了解系统中发生的情况或原因。
也许你也可以改变架构?