【问题标题】:Executing batches of commands using redis cli使用redis cli执行批量命令
【发布时间】:2012-06-05 01:51:21
【问题描述】:

我有一个长文本文件,其中包含我需要使用 redis 命令行界面执行的 redis 命令:

例如

DEL 9012012
DEL 1212
DEL 12214314

等等

我似乎无法找到一种比一次输入命令更快的方法。有几十万行,所以我不想把它们都堆成一个 DEL 命令,它们也不需要一次运行。

【问题讨论】:

    标签: redis


    【解决方案1】:

    以下代码适用于我在 mac 上使用 redis 2.4.7

    ./redis-cli < temp.redisCmds
    

    这是否满足您的要求?或者您想看看是否有办法以编程方式更快地做到这一点?

    【讨论】:

    • 如果经过身份验证,则使用redis-cli -a &lt;password&gt; &lt; temp.redisCmds
    • 在 Windows PowerShell 中:Get-Content cmds.txt | redis-cli
    • 当我把它改成redis-cli --pipe &lt; temp.redisCmds 时,它变得更快了。请参阅@zucaritask 的答案。
    【解决方案2】:

    redis-cli --pipe 可用于批量插入。它从 2.6-RC4 和 Redis 2.4.14 开始可用。 例如:

    cat data.txt | redis-cli --pipe
    

    更多信息在:http://redis.io/topics/mass-insert

    【讨论】:

    • 如果你想执行多个命令,例如选择 # 和 flushdb,然后使用 ControlAltDel 的解决方案,因为使用 --pipe 选项将无法正常工作。
    • // ,有没有办法使用--pipe 选项来解决这个问题?
    • 我能够使用--pipe 选项来执行大量EXPIRE 命令,因此它适用于插入以外的其他事情。注意:我必须确保文件中的每个命令都由回车换行分隔,而不是只是换行。
    【解决方案3】:

    如果您不想制作文件,请使用echo\n

    echo "DEL 9012012\nDEL 1212" | redis-cli
    

    【讨论】:

    • 对我来说就像一个魅力!
    • 在某些操作系统上,您应该使用echo -e 使操作系统按预期解释\n。请记住,您始终可以使用 redis-cli -d &lt;dilimiter&gt; 更改默认的 redis dilimited
    • 在 CentOS 上,echo -e "DEL 9012012\nDEL 1212" | redis-cli
    • 或者,如果您使用 bash:redis-cli &lt;&lt;&lt;$'DEL 9012012\nDEL 1212'。您也可以代替$'',只使用双引号和实际的换行符(即不是\n)来分隔命令。
    【解决方案4】:

    我知道这是一个旧线程,但添加它是因为它似乎错过了其他答案,而且对我来说效果很好。

    如果您不想使用 echo 或显式添加 \n 或创建新文件,则在这里使用 heredoc 效果很好 -

    redis-cli <<EOF
    select 15
    get a
    EOF
    

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2017-11-26
      • 2021-10-08
      • 2017-05-11
      相关资源
      最近更新 更多