我想增加一个redis计数器,但我想从零开始计数,而不是从定义的起始数字开始计算(例如-5)。
我知道如何通过Lua脚本中的SET / INCR实现这一点,但我想知道是否只能使用INCR命令实现它。我们为INCRBY定义了类似增量的东西,我们可以定义起点吗?
答案 0 :(得分:1)
您无法单独使用INCR命令执行此操作。我会检查SETNX的值,如果它返回0(表示密钥存在),则递增它。
请注意,如果你在谈论非过期的计数器,你可以用两个往返的价格以这种方式实现原子性,如果密钥不存在,我们创建它,将其设置为初始值,并且&# 39;它,一次往返,原子。如果确实存在,我们会增加它,但我们仍然是一致的(除非密钥已过期或在两次调用之间被删除)。
但是,没有理由不为此使用Lua脚本,它是执行此操作的首选方式。
答案 1 :(得分:1)
Lua对于此过程完全没问题,但您也可以通过事务执行此操作:
MULTI
SET counter -5 NX
INCR counter
EXEC
INCR
每次都会运行,因此如果您希望第一次将其设置为-5
,则应将SET
值更改为-6
。您还可以管理这4个命令,以避免发送命令的4个RTT。