Redis HINCRBY 哈希字段 -1 计数器,仅递减直到 0 或非负值

问题描述 投票:0回答:2

负数计数: redis.hincrby(

User:${targetUser.id}
, "followerCount", -1)

我希望它停在 0

amazon-web-services redis
2个回答
1
投票

HINCRBY 运算返回增量运算后的新值。

redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5

如果您的 HINCRBY 操作返回 -1,则意味着该用户的 followerCount 为 0,因此不应减少。 因此,您可以将 HSET 触发为 0 以将其设置为零。 更好的方法是使用 redis transaction,它将:

  • 首先使用 HGET 检查值,
  • 如果大于零,则执行增量为 -1 的 HINCRBY
  • 如果为零,则不执行任何操作。

0
投票

我们还可以使用下面提到的方法,在某些情况下可能会有用。我知道这不是最佳解决方案,但它比每次都使用 hGet 更好。

const updatedVal = await redis.hIncrBy(KEY, FIELD, -1);

if (updatedVal < 0) {
await redis.hSet(KEY, FIELD, 0);
return false;
}

return true;
© www.soinside.com 2019 - 2024. All rights reserved.