【问题标题】:How to efficiently set multiple related keys in redis?redis中如何高效设置多个相关键?
【发布时间】:2021-10-05 09:05:17
【问题描述】:

我想在 bash 脚本中执行以下操作:

num_total_keys=0x1FFFF

for ((i = 0; i <= $num_total_keys; i++))
do
    redis-cli SET some_prefix:$i True > /dev/null
done

但是,当我执行此操作时,它需要很长时间。有没有更有效的方法来做到这一点?

【问题讨论】:

    标签: bash redis-cli


    【解决方案1】:

    经验法则:

    如果您的命令接受流水线数据/指令;不要在 shell 循环中重复运行您的命令,而是在将其作为单个调用传递给您的命令之前构建所有命令,如下所示:

    #!/usr/bin/env sh
    
    i=131071
    
    while [ $i -ge 0 ]; do
      printf 'SET some_prefix:%d True\n' $i
      i=$((i - 1))
    done | redis-cli --pipe
    

    或者使用 Bash 的 brace expansion:

    printf 'SET some_prefix:%d True\n' {131071..0} | redis-cli --pipe
    

    【讨论】:

    • 如果你使用redis-cli --pipe,这些命令的运行速度会快大约 10 倍。看看这里...redis.io/topics/mass-insert
    • 谢谢@MarkSetchell,更新了我的答案
    • 非常感谢您提供这些提示。我只想补充一点,在 Linux 系统中,printf 命令中可能需要使用\r\n 而不是\n。见stackoverflow.com/a/35093371/5762785
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2014-11-14
    • 2018-12-08
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多