fundebug
V2EX  ›  Redis

redis 的 KEYS 命令不能乱用啊...

  •  
  •   fundebug · Sep 21, 2018 · 17214 views
    This topic created in 2967 days ago, the information mentioned may be changed or developed.
    41 replies  •  2018-09-22 13:04:22 +08:00
    aspromiss
    aspromiss
    Sep 21, 2018
    1
    上周刚用过一次 keys 键前缀* 查询,惨痛教训
    thechosenone
    thechosenone
    Sep 21, 2018
    2
    长知识
    echoZero
    echoZero
    Sep 21, 2018
    3
    我们之前一个同事 keys 一把 然后线上 redis 直接来了一波 Redis 超时
    lazypu
    lazypu
    Sep 21, 2018
    4
    keys 不能用, 那应该用什么?
    mht
    mht
    Sep 21, 2018
    5
    @linxl 刚刚看完这个文章 说是换 scan
    wps353
    wps353
    Sep 21, 2018
    6
    缓存雪崩
    jiantalk
    jiantalk
    Sep 21, 2018
    7
    Redis 是单线程要阻塞,我司的同学比较喜欢用这个,还好我们量不算大
    mrgeneral
    mrgeneral
    Sep 21, 2018
    8
    正常啊 这个线上和容易超时,因为 redis 是单进程的。

    封装一个 scan 命令就好了,正常命令行下的 scan 命令不太好用,得多次迭代才能找到 key
    lazypu
    lazypu
    Sep 21, 2018
    9
    @mht 哈,看到了
    sampeng
    sampeng
    Sep 21, 2018
    10
    keys 是肯定不能用的。。scan 才行。。。封装即可。。。。
    misaka19000
    misaka19000
    Sep 21, 2018
    11
    我们有同事用 medis 连到生产的库,这玩意一连上去就会自动执行 keys *来获取所有的 key,然后生产环境的 Redis 就主备切换了,还是挺危险的
    CMGS
    CMGS
    Sep 21, 2018
    12
    keys 是全局锁……用 scan 可破
    ghl
    ghl
    Sep 21, 2018
    13
    @misaka19000 #11 medis 用的是 scan 吧,刚本地 monitor 确认了下确实没用 keys
    misaka19000
    misaka19000
    Sep 21, 2018
    14
    @ghl #13 是的 刚刚问了下他用的不是 medis,是另外一个工具
    Ryoma
    Ryoma
    Sep 21, 2018
    15
    直接把 keys 禁用就好了
    aa6563679
    aa6563679
    Sep 21, 2018 via iPhone
    16
    一直在用 keys....不过我这数据都存 hash 了 key 并不多
    orangeade
    orangeade
    Sep 21, 2018
    17
    遇到过这个事故
    Rosanta
    Rosanta
    Sep 21, 2018
    18
    这命令直接禁用就行了,或者 rename 走
    yaodong0126
    yaodong0126
    Sep 21, 2018
    19
    这个命令,我在自己封的 client 中,直接屏蔽掉了...
    derrickT
    derrickT
    Sep 21, 2018
    20
    keys 是遍历所有的 key,key 多的时候当然会非常慢
    tachikomachann
    tachikomachann
    Sep 21, 2018 via Android
    21
    我们线上一直是禁用这个的
    Linxing
    Linxing
    Sep 21, 2018
    22
    所以 Keys 设计出来的意义是??
    yueyoum
    yueyoum
    Sep 21, 2018❤️1
    23
    所以现在工程师这么好做吗?

    这是大概 4,5 年前 学习 redis 的时候, 准备用在产品中的 基础啊
    dengtongcai
    dengtongcai
    Sep 21, 2018 via Android
    24
    会阻塞的!
    pricelessLucky
    pricelessLucky
    Sep 21, 2018
    25
    长知识了
    kslr
    kslr
    Sep 21, 2018
    26
    这一定是没看文档
    xuanbg
    xuanbg
    Sep 21, 2018
    27
    key 的数量只有千把个是没问题的,数量上万了就很危险了。hash 也一样,存对象似乎很方便,但如果一次要操作多个属性,还是序列化后存 string 更好。redis 虽然速度快,但读写次数多了也就不快了。连续读写 rides 十几次,可能还没读写一次 mysql 数据库快。
    moonsn
    moonsn
    Sep 21, 2018 via iPhone
    28
    学到了,下周回去改代码😂
    fundebug
    fundebug
    OP
    Sep 21, 2018
    29
    @moonsn1994 应该今天晚上改
    unixbeta
    unixbeta
    Sep 21, 2018 via iPhone
    30
    擦,现在这个时代还有技术跟不上业务的,真是可耻。
    fanyingmao
    fanyingmao
    Sep 21, 2018 via Android
    31
    @xuanbg 用 string 的话感觉只读写少量属性,却操作了全部的数据,redis 读写数据量和次数哪个对性能消耗更大?要有数据量和次数消耗的比值才好权衡。
    yuatom
    yuatom
    Sep 21, 2018 via iPhone
    33
    生产环境不能用 keys,算是规范了吧。
    Immortal
    Immortal
    Sep 22, 2018
    34
    一直以为这个是常识
    和数据库 like 类似
    sampeng
    sampeng
    Sep 22, 2018 via iPhone
    35
    @fanyingmao 记住 redis 是线程动物,所有性能和问题都是出于忘记这个事实。

    读大数据量必然引起其他客户端操作延迟增大(大的 string),操作大的内部对象必然引起其他客户端操作延迟,甚至有严重的瓶颈(把大的 hash/list 全取出来)
    sampeng
    sampeng
    Sep 22, 2018 via iPhone
    36
    @fanyingmao 数据量单机不做特别操作,云主机有自己的限制,不是无上限。500 左右?具体得问云主机。自建的就看交换机能力了,千兆上下浮动。这个跑满,全部都得跪
    kingcc
    kingcc
    Sep 22, 2018
    37
    文章末尾的开发建议总结的非常好,点赞
    cpdyj0
    cpdyj0
    Sep 22, 2018 via Android
    38
    没实际用过 Redis,学生党,但最早接触到这玩意儿的时候就知道不能用 KEYS * 啊…… CPU 会被打满啊
    karllynn
    karllynn
    Sep 22, 2018
    39
    用 scan 就行啊。。redis 应该提供配置直接禁用某些命令,哈
    xuanbg
    xuanbg
    Sep 22, 2018
    40
    @fanyingmao 有可能一次读取或更新超过 5 个属性的话,果断 string。hash 我一般都是用来存配置,就是为了减少 key 数量,另外,客户端连上去,也更容易管理。
    lrh3321
    lrh3321
    Sep 22, 2018 via Android
    41
    涨知识了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5633 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    ♥ Do have faith in what you're doing.