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 EVAL与WATCH/GET/MULTI/EXEC_Redis - Fatal编程技术网

Redis EVAL与WATCH/GET/MULTI/EXEC

Redis EVAL与WATCH/GET/MULTI/EXEC,redis,Redis,我已经阅读了EVAL上的文档,其中声明“Redis保证以原子方式执行脚本:在执行脚本时不会执行其他脚本或Redis命令。” 我还读过关于使用WATCH/GET/MULTI/EXEC进行本质上是乐观锁定的事务的内容。我现在有一个关于这两个构造之间并发性差异的问题 在我看来,如果我想读取一些键,进行长时间的计算(比如说,解析几百KB的json,然后做出一些决定),然后写回结果,如果我使用EVAL,我将阻止所有对redis数据库的请求,即使那些与我将要交互的键集之外的键交互的请求 另一方面,如果我使用

我已经阅读了EVAL上的文档,其中声明“Redis保证以原子方式执行脚本:在执行脚本时不会执行其他脚本或Redis命令。”

我还读过关于使用WATCH/GET/MULTI/EXEC进行本质上是乐观锁定的事务的内容。我现在有一个关于这两个构造之间并发性差异的问题

在我看来,如果我想读取一些键,进行长时间的计算(比如说,解析几百KB的json,然后做出一些决定),然后写回结果,如果我使用EVAL,我将阻止所有对redis数据库的请求,即使那些与我将要交互的键集之外的键交互的请求

另一方面,如果我使用WATCH方法,我将需要构建重试逻辑,但是如果我正在监视100个键中的100个键,我只需要担心其他客户端与这100个键交互,我实际上不会在整个期间阻塞数据库,就在EXEC调用期间


请让我知道这种理解是否正确,如果我在这里遗漏了什么,请给我任何澄清。

您的理解是完美的:)


你应该考虑的一点是,Apple允许你节省网络带宽和延迟,因为所有事情都是服务器端完成的。我并不是说单凭这一点就应该让天平朝着有利于它的方向倾斜,特别是当你按照你的问题建议对数据进行大量处理时,但你应该记住这一点。

你的理解是完美的:)

你应该考虑的一点是,Apple允许你节省网络带宽和延迟,因为所有事情都是服务器端完成的。我并不是说单凭这一点就应该让天平朝着有利于它的方向倾斜,特别是当你按照你的问题建议对数据进行大量处理时,但你应该记住这一点