定义redis INCR的起始编号

时间:2017-08-22 10:00:48

标签: redis

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

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

2 个答案:

答案 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。