Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis事务和监视命令_Redis_Transactions - Fatal编程技术网

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,您可以在服务器端

因为我想在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
,您可以在服务器端原子地运行多个命令,并在
EXEC
返回后获取这些命令的所有回复

在您的情况下,
val=val+1
必须在客户端上运行,并且它不能是
多个
命令的一部分。另外,在
EXEC
返回之前,您无法获得
val=get mykey
的回复。因此,您不能在
设置mykey val
之前增加
val
。相反,您必须在
MULTI
外部运行
GET
命令,并使用
WATCH
命令确保在更新密钥之前没有更改密钥

实现目标的另一个解决方案,即在服务器端运行
val=val+1
:您可以使用。Lua脚本是
MULTI
EXEC
命令的替代品,它在服务器端以原子方式运行。事实上,是的