Redis事务和监视命令
因为我想在redis中使用事务。我阅读了redis交易的文档,发现如下Redis事务和监视命令,redis,transactions,Redis,Transactions,因为我想在redis中使用事务。我阅读了redis交易的文档,发现如下 WATCH mykey val = GET mykey val = val + 1 MULTI SET mykey $val EXEC 但我的问题是,如果redis事务是按顺序和原子方式执行的,那么我们就不能用下面的语句实现上述相同的行为吗 MULTI val = GET mykey val = val + 1 SET mykey $val EXEC 谢谢,不,你无法做到这一点 使用MULTI和EXEC,您可以在服务器端
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
但我的问题是,如果redis事务是按顺序和原子方式执行的,那么我们就不能用下面的语句实现上述相同的行为吗
MULTI
val = GET mykey
val = val + 1
SET mykey $val
EXEC
谢谢,不,你无法做到这一点 使用
MULTI
和EXEC
,您可以在服务器端原子地运行多个命令,并在EXEC
返回后获取这些命令的所有回复
在您的情况下,val=val+1
必须在客户端上运行,并且它不能是多个
命令的一部分。另外,在EXEC
返回之前,您无法获得val=get mykey
的回复。因此,您不能在设置mykey val
之前增加val
。相反,您必须在MULTI
外部运行GET
命令,并使用WATCH
命令确保在更新密钥之前没有更改密钥
实现目标的另一个解决方案,即在服务器端运行val=val+1
:您可以使用。Lua脚本是MULTI
和EXEC
命令的替代品,它在服务器端以原子方式运行。事实上,是的