【发布时间】:2021-05-29 00:07:10
【问题描述】:
如何有条件地写入 aerospike bin?我想从 aerospike bin 中减去值,在这种情况下,我可以使用 Operation.add(-1) 然后如何通过首先检查值以及如果值大于零然后从 bin 中减去 1 来使其在单个事务中发生价值。 请用java客户端建议。
【问题讨论】:
标签: java caching transactions aerospike
如何有条件地写入 aerospike bin?我想从 aerospike bin 中减去值,在这种情况下,我可以使用 Operation.add(-1) 然后如何通过首先检查值以及如果值大于零然后从 bin 中减去 1 来使其在单个事务中发生价值。 请用java客户端建议。
【问题讨论】:
标签: java caching transactions aerospike
在 Java 中使用表达式。客户端源代码是开放的。您可以检查测试代码中的许多示例并进行调整。 https://github.com/aerospike/aerospike-client-java/blob/8a4daba81bb5ab8496523be18e898a2d0ec8aec3/test/src/com/aerospike/test/sync/basic/TestExpOperation.java Java API 文档在这里:https://docs.aerospike.com/apidocs/java/
你会像这样构建一个表达式:
// a > 0
Exp.gt(Exp.intBin("a"), Exp.val(0))
如果 Exp 计算结果为真,则执行减法运算。
另外请注意,如果唯一的操作是增量,那么上面显示的过滤器表达式将可以正常工作。如果您将增量与其他操作一起发送,那么它们可以使用 write-expression(在 Aerospike 5.6.0 中引入)。 写表达式类似于:
Exp.cond(
Exp.gt(Exp.intBin("a"), Exp.val(0)), Exp.sub(Exp.intBin("a"), 1),
Exp.unknown())
使用此方法还假定您还希望在此操作失败时执行其他操作,因此您需要使用 EVAL_NO_FAIL 策略。
【讨论】: