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

2018-09-21 16:41:52 +08:00
 fundebug

据说损失了几百万。。。文章总结得很好:

Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失

15083 次点击
所在节点    Redis
41 条回复
aspromiss
2018-09-21 16:55:02 +08:00
上周刚用过一次 keys 键前缀* 查询,惨痛教训
thechosenone
2018-09-21 16:59:42 +08:00
长知识
echoZero
2018-09-21 17:04:43 +08:00
我们之前一个同事 keys 一把 然后线上 redis 直接来了一波 Redis 超时
linxl
2018-09-21 17:13:19 +08:00
keys 不能用, 那应该用什么?
mht
2018-09-21 17:14:07 +08:00
@linxl 刚刚看完这个文章 说是换 scan
wps353
2018-09-21 17:14:08 +08:00
缓存雪崩
jiantalk
2018-09-21 17:15:57 +08:00
Redis 是单线程要阻塞,我司的同学比较喜欢用这个,还好我们量不算大
mrgeneral
2018-09-21 17:16:15 +08:00
正常啊 这个线上和容易超时,因为 redis 是单进程的。

封装一个 scan 命令就好了,正常命令行下的 scan 命令不太好用,得多次迭代才能找到 key
linxl
2018-09-21 17:16:23 +08:00
@mht 哈,看到了
sampeng
2018-09-21 17:18:47 +08:00
keys 是肯定不能用的。。scan 才行。。。封装即可。。。。
misaka19000
2018-09-21 17:21:35 +08:00
我们有同事用 medis 连到生产的库,这玩意一连上去就会自动执行 keys *来获取所有的 key,然后生产环境的 Redis 就主备切换了,还是挺危险的
CMGS
2018-09-21 17:22:07 +08:00
keys 是全局锁……用 scan 可破
ghl
2018-09-21 17:30:21 +08:00
@misaka19000 #11 medis 用的是 scan 吧,刚本地 monitor 确认了下确实没用 keys
misaka19000
2018-09-21 17:32:09 +08:00
@ghl #13 是的 刚刚问了下他用的不是 medis,是另外一个工具
Ryoma
2018-09-21 17:36:09 +08:00
直接把 keys 禁用就好了
aa6563679
2018-09-21 17:41:54 +08:00
一直在用 keys....不过我这数据都存 hash 了 key 并不多
orangeade
2018-09-21 17:46:32 +08:00
遇到过这个事故
Rosanta
2018-09-21 17:49:41 +08:00
这命令直接禁用就行了,或者 rename 走
yaodong0126
2018-09-21 17:50:06 +08:00
这个命令,我在自己封的 client 中,直接屏蔽掉了...
derrickT
2018-09-21 17:51:13 +08:00
keys 是遍历所有的 key,key 多的时候当然会非常慢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/491596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX