当前位置: 首页 > 知识库问答 >
问题:

在多个JVM上为每个键原子地更新整数

琴正初
2023-03-14

我们有一个要求,在那里问题可以缩小为。

  • 有多个键,每个键映射到一个整数。
  • 当在JVM上接收到一个键时,需要从共享内存中检索int值,递增它,然后将递增的值放回共享内存中。

因此,当两个JVM或两个线程读取相同的值时,其中一个的更新应该一致失败,这样您就不会丢失任何JVM上的任何线程所做的任何增量。

是否有其他技术可以很好地满足这一要求。

共有1个答案

堵凯
2023-03-14

线程之间的同步很容易,但JVM之间的同步非常困难,尤其是在需要支持多个平台的情况下。我建议使用以下方法之一集中更新代码,这两种方法都“外包”数据更新任务:

  • 从知道如何执行更新任务的单个进程发布一个简单的REST API,并序列化请求。
  • 使用关系数据库保存计数,并确保客户端代码在事务失败时正确回滚。

可能不是你想听到的,但这两种方法都很有效。

 类似资料:
  • 问题内容: 我试图像这样更新我的表: 我可以做一个,但是会发送50多个单独的查询,这非常慢。这就是为什么我希望将其合并为1个大查询。 (我确实为每行使用一个 id ,但是 game_id , x 和 y 的组合才是我用来标识所需行的方法。) 这里描述了来自codeIgniter的update_batch()函数: 使用CodeIgniter更新批处理 是有用的,并且几乎是完美的,但是它仅允许1个单

  • 问题内容: 我在使用MySQL 5.5.22的Django时遇到以下问题。 给定一个具有列ID,级别和存储为a11,a12,a21,a22的2x2矩阵的表,我具有以下行: 给定一个查询集qs,我进行以下更新: django为此生成以下查询(从db.connection.queries中获取该查询,为简洁起见,删除where子句): 然后,我的行如下所示: 对于任何一行,都应该为True,并且据此,

  • 我试图更新一个子文档(有效),然后更新除上一个子文档之外的多个子文档。基本上,每次

  • 我想使用mongoose从多个文档更新多个子文档。 我目前的代码是: 模式的一部分是: 但是这段代码只更新id arr中的最后一个元素。

  • 问题内容: 我有一个Excel文件,我想更新工作表中的多行。所以我写了这段代码: 我得到这个错误: 查询表达式’id = 1更新[Data14City $]中的语法错误(缺少运算符),设置B_1_1 = 0,B_1_2 = 8,B_1_3 = 17,B_1_4 = 0,其中id = 2’。 当我添加到此行时: 我收到此错误: SQL语句结束后找到的字符。 如何在Excel中执行多条语句? 谢谢 问

  • 为了保存数据,我将使用一个SET操作,即: 然后,为了更新数据,我将使用两个操作(GET+SET),即: 选项2:单值多键 我对方案1的赞成/反对意见 备选方案1优点: 更好的数据库组织,因为每个用户只有一个密钥 通过一个GET操作,我将拥有所有JSON数据 要更新所有JSON字段,我将只使用两个操作(GET+SET) 数据库的文件大小将更小 null 如果希望并发修改JSON负载(非原子读取-修