java 如何实现计数,java – 如何跨多个JVM节点实现计数器的最简单/最快的方法

考虑一下问题:

我有许多Tomcat节点,其中Web应用程序提供一些无状态内容.例如,1000个第一次请求申请必须用’a’回答,对于下一个10000用’b’回答,其余用’c’回答.

我首先考虑了消息:应用程序从某个存储中获取总服务数 – >如果它小于n,则提供内容’a’ – >一旦提供了内容,应用程序就会发送一条消息 – >消息被消耗 – >总服务计数在某些存储上递增 – > …但是在这种情况下,由于消息服务事件和存储器上的计数器增量之间的轻微(或大量的窥视加载时间)延迟,因此超调的可能性非常大.

然后我考虑设置memcached-session-manager来将计数器存储在共享会话中.但对于我的简单案例,这看起来很重要.

有人可以建议是否有多种直接的方式可以让多个JVM实例相互通信(适用于我的情况)?

最佳答案 如果它绝对必须是正确的,你不想要延迟比我认为Redis或Hazlecast是你最好的选择.

Particularly Redis as it has atomic count like operations.虽然理论上你可以用memcache做同样的事情,但Redis是为这个确切的用例(统计计数器)而设计的.

您也可以使用像H2这样的内存数据库,或者只是将Postgres表设置为unlogged或者适用于您的RDBMS的任何内容,以便在伪内存表中保持不那么安全.关于RDBMS的令人讨厌的事情是,所有RDBMS都不一致地支持upserting aka MERGE.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值