定义redis INCR的起始编号

定义redis INCR的起始编号,redis,Redis,我想增加一个redis计数器,但我不想从零开始计数,而是从一个定义的起始数字开始计数(例如-5) 我知道如何通过Lua脚本中的SET/INCR实现这一点,但我想知道是否只有使用INCR命令才能实现这一点。类似于我们为INCRBY定义的,在定义增量的地方,我们可以定义起点吗?您不能单独使用INCR命令来定义。我将检查SETNX的值,如果它返回0(意味着键存在),则递增它 请注意,如果您谈论的是非过期计数器,那么您可以通过这种方式实现原子性,而无需Lua,代价是两次往返:如果键不存在,我们创建它,将

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


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

您不能单独使用INCR命令来定义。我将检查SETNX的值,如果它返回0(意味着键存在),则递增它

请注意,如果您谈论的是非过期计数器,那么您可以通过这种方式实现原子性,而无需Lua,代价是两次往返:如果键不存在,我们创建它,将其设置为初始值,就是这样,一次往返,原子。如果它确实存在,我们会增加它,但我们仍然是一致的(除非密钥过期或在两次调用之间被删除)


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

Lua对于此过程来说非常合适,但您也可以通过事务执行此操作:

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