本文介绍 hazelcast 中 IAtomicLong 的使用。
IAtomicLong 的基础使用
首先放上基础代码
示例代码
代码主要包含两部分:
第一部分可以看出分布式的 IAtomicLong 与 jdk的性能差距,同样处理一百万数据,前者消耗 13622 毫秒,后者消耗 10 毫秒,选用时需要注意该特性。
第二部分是使用接口可以将自定义的操作发到 hazelcast 服务器去执行,性能更好。
通过代码可以看到不同方法执行 IFunction 的效果:
- apply 执行 IFunction 的逻辑,但是不改变原值,将计算后的值返回。
- alter 执行 IFunction 的逻辑,改变原值,不需要返回值。
- alterAndGet 执行 IFunction 的逻辑,改变原值,将改变后的值返回。
- getAndAlter 执行 IFunction 的逻辑,改变原值,然后将原值返回。
为什么要用 Functions
由于期望对 IAtomicLong 的操作应该是原子性的,如果操作 atomicLong.set(atomicLong.get() + 2), 那么读与写是分开的,可能造成的结果与预期不一样,所以通过 IFunction 发送到 hazelcast 节点执行。
通过使用 Functions ,不是将数据放到代码中,而是将逻辑发送给数据,从而使 IAtomicLong 获得了数据的可扩展性。
脑裂保护
脑裂保护可以分为写、读写、读三类操作的保护。
IAtomicLong 的脑裂情况可以采取下面这个配置项进行避免。
配置项 | 含义 | 备注 |
---|---|---|
quorum-ref | IAtomicLong依赖的quorum | |
通过上面的两个代码例子,希望能够对 hazelcast 中的 IAtomicLong 有一定的认识。 |