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

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

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

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

15104 次点击
所在节点    Redis
41 条回复
tachikomachann
2018-09-21 17:52:26 +08:00
我们线上一直是禁用这个的
Linxing
2018-09-21 18:12:27 +08:00
所以 Keys 设计出来的意义是??
yueyoum
2018-09-21 18:29:50 +08:00
所以现在工程师这么好做吗?

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

读大数据量必然引起其他客户端操作延迟增大(大的 string),操作大的内部对象必然引起其他客户端操作延迟,甚至有严重的瓶颈(把大的 hash/list 全取出来)
sampeng
2018-09-22 00:42:42 +08:00
@fanyingmao 数据量单机不做特别操作,云主机有自己的限制,不是无上限。500 左右?具体得问云主机。自建的就看交换机能力了,千兆上下浮动。这个跑满,全部都得跪
kingcc
2018-09-22 00:52:02 +08:00
文章末尾的开发建议总结的非常好,点赞
cpdyj0
2018-09-22 08:48:16 +08:00
没实际用过 Redis,学生党,但最早接触到这玩意儿的时候就知道不能用 KEYS * 啊…… CPU 会被打满啊
karllynn
2018-09-22 10:59:04 +08:00
用 scan 就行啊。。redis 应该提供配置直接禁用某些命令,哈
xuanbg
2018-09-22 12:46:05 +08:00
@fanyingmao 有可能一次读取或更新超过 5 个属性的话,果断 string。hash 我一般都是用来存配置,就是为了减少 key 数量,另外,客户端连上去,也更容易管理。

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

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

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

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

© 2021 V2EX