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
Database redis能否将依赖于先前命令的多个命令流水线化?_Database_Redis_Jedis - Fatal编程技术网

Database redis能否将依赖于先前命令的多个命令流水线化?

Database redis能否将依赖于先前命令的多个命令流水线化?,database,redis,jedis,Database,Redis,Jedis,我是redis的新手,现在还在玩它。我想测试它是否与我的项目相关,但我不确定我正在运行的特定命令。SO上的用户让我确信使用管道和事务的性能优势,所以我想问一下如何做到这一点 基本上,我有两个声明,我只想发布,不必等待结果(似乎是管道衬砌的一个很好的候选。它看起来像这样: Does valueX exist? If it does insert valueY 这很简单,但到目前为止,我一直在研究的所有方法似乎都在等待ValueX是否存在的响应,因为我正在执行超过10亿个循环的程序,所以它会停止运

我是redis的新手,现在还在玩它。我想测试它是否与我的项目相关,但我不确定我正在运行的特定命令。SO上的用户让我确信使用管道和事务的性能优势,所以我想问一下如何做到这一点

基本上,我有两个声明,我只想发布,不必等待结果(似乎是管道衬砌的一个很好的候选。它看起来像这样:

Does valueX exist?
If it does insert valueY
这很简单,但到目前为止,我一直在研究的所有方法似乎都在等待ValueX是否存在的响应,因为我正在执行超过10亿个循环的程序,所以它会停止运行


这可能吗?如果有帮助的话,我正在使用Java,但还没有决定使用哪一个客户端库(jedis或jredis,仍在测试中)。实际上,我甚至还没有完全决定使用redis,但我非常倾向于它(从速度上看,这对我所做的工作很有好处),所以任何建议都是可以接受的。

不,目前还不可能完成这样的事情。您寻求的是目前缺少的一个功能,但它将在2.6版本的Redis中可用。它被称为LUA脚本。您可以执行依赖于以前的命令的服务器命令,所有这些命令都集成在一起,而无需执行在客户端对其进行蚀刻。有关更多详细信息,请参阅。

Redis不直接支持此功能,但在许多情况下通常需要此功能。更通用的“原子”模式是:

Check multiple conditions
If all satisfied, run multiple commands
这可以通过简单的lua脚本实现

--验证条件并执行命令(如果确定)
本地参数=cjson.decode(ARGV[1])
--检查条件
对于_u,请成对签入(参数[“如果”])do
如果#check==2,则
如果检查[1]~=redis.call(解包(检查[2]),则返回0结束
否则请检查[2]=“然后”
如果检查[1]~=redis.call(解包(检查[3]),则返回0结束
如果选中[2]=“!=”则
如果检查[1]==redis.call(解包(检查[3]),则返回0结束
如果选中[2]=“>”则
如果check[1]=redis.call(解包(check[3]),则返回0 end
其他的

错误('invalid operator“..tostring(check[2])…”)”(应为“==”、“!=”、“>”或"非常感谢您的回答。很高兴看到它的到来,但我真的不想等待,所以我想我可以在我的程序中自己构建类似的东西。这是逻辑,我有一个方法,我将成对的查找/写入值发送给它,它将请求排队并在事务中运行它们?这样我的程序的其余部分可以继续运行ile此部分已排队?您可以通过管道发送一批查找命令,等待结果,然后通过管道发送一些写入命令。您可以在单独的线程/进程中执行此操作,以避免在结果可用之前阻塞。