定义 redis incr 的起始编号



我想增加一个 redis 计数器,但我想开始计数不是从零开始,而是从定义的起始数字开始计数(例如 -5(。

我知道如何通过 Lua 脚本中的 SET/INCR 实现这一点,但我想知道我是否只能使用 INCR 命令来实现它。我们为定义增量的INCRBY定义类似的东西,我们可以定义起点吗?

Lua非常适合此过程,但您也可以通过事务来完成:

MULTI
SET counter -5 NX
INCR counter
EXEC

INCR每次都会运行,因此如果您希望第一次调用将其设置为-5则应将SET值更改为-6。您还可以通过管道传输这 4 个命令,以避免发送命令的 4 个 RTT。

不能仅使用 INCR 命令来执行此操作。我会检查 SETNX 的值,如果它返回 0(意味着密钥存在(,然后递增它。

请注意,如果您谈论的是未过期的计数器,则可以在没有 Lua 的情况下以这种方式实现原子性,代价是两次往返:如果密钥不存在,我们创建它,将其设置为初始值,仅此而已,一次往返,原子。如果它确实存在,我们会递增它,但我们仍然是一致的(除非密钥在两次调用之间过期或删除(。

但是,没有理由不使用Lua脚本,这是执行此操作的首选方法。

最新更新