V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ackvincent
V2EX  ›  Redis

Redis 中使用 pipeline 执行命令时,有单次执行数量的限制吗?

  •  
  •   Ackvincent · 360 天前 · 2195 次点击
    这是一个创建于 360 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过 scan 方法获取 1W 个 key 的名字,然后使用 pipeline 执行 memory_usage 命令获取这 1W 个 key 占用空间的大小,这样会对服务器造成很大压力吗?现在在测试服务器上执行感觉没什么压力,不知道生产环境下,会不会有影响。 谢谢

    9 条回复    2023-11-30 13:43:14 +08:00
    kuituosi
        1
    kuituosi  
       360 天前
    redis 单线程的,一次执行 1w 个会导致处理其他请求延迟
    ShuWei
        2
    ShuWei  
       360 天前
    我就是好奇的问一句,需要这样操作,这是什么样的场景啊
    totoro52
        3
    totoro52  
       360 天前
    其他线程会被阻塞
    qianzanqi
        4
    qianzanqi  
       360 天前
    服务端输出缓冲区被打爆了会强制断开连接,注意这个就好。而且 pipeline 一次一万和十次一千也差不了多少,多拆几次呗
    lsk569937453
        5
    lsk569937453  
       360 天前
    所以为什么不一条指令一条指令的执行 memory_usage 呢
    Ackvincent
        6
    Ackvincent  
    OP
       360 天前
    @kuituosi 谢谢您
    @ShuWei 希望监控服务器的运行状态,提早发现 bigkey 以免内存不够用,看各位大佬的说法,这样做并不科学。
    @totoro52 谢谢您
    @qianzanqi 也有试过拆成十次一千,测试时执行时间是 4700ms ,一次一万是 1400ms ,之前考虑执行耗时短会减轻对服务器端的压。谢谢您。
    @lsk569937453 这样每条指令都要通信一次,执行时间会比较长。
    感谢各位大佬的帮助,后边调整为凌晨负载低的时间执行,尽量不对正常业务造成影响。
    ShuWei
        7
    ShuWei  
       360 天前
    建议最好用行政手段从应用层规范,尽量避免大 key ,再使用 slowlog 定期检查是否有漏网之鱼,通过 scan 跟 memory usage 来检查,实在是个不太明智的做法

    如果规模很大,可以考虑上个代理层,这样可以在代理层进行记录,可能更直观
    shinyruo2020
        8
    shinyruo2020  
       360 天前
    用管道问题不大,注意不要用事务就行
    guxingke
        9
    guxingke  
       360 天前
    https://github.com/guxingke/redis-tools

    ------
    贴一个小工具,bigkeys ,扫描 rdb 的大 key

    λ rdt bigkeys xxxx.rdb
    total: 4419415

    Biggest String Keys
    ┌───────────────────┬───────────────────┬───────────────────┬───────────────────┬──────────────────┐
    │ key │ type │ mem(byte) │ size │ ttl(ms) │
    ├───────────────────┼───────────────────┼───────────────────┼───────────────────┼──────────────────┤
    │ xxxxxxx │ String │ 222955086 │ 1 │ -1 │
    │ yyyyyyyyyyyyt │ String │ 13 │ 1 │ 110394014 │
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:26 · PVG 15:26 · LAX 23:26 · JFK 02:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.