什么样的Redis命令会有如此威力,造成这样的后果?
某技术公司技术执行了 keys * 这样的命令后,导致了redis 锁住,Cpu飙升,引起了所有支付链路被卡住,等几十秒结束后,所有请求流量挤压到了dbs数据库中,使数据库产生了雪崩的效应,发生了数据库宕机事件。
执行keys *的程序员被开除。
对Redis稍微有点使用经验的人都知道线上是不能使用keys * 相关命令的,虽然其模糊搜索匹配功能使用非常简单,在小数据情况下使用也没有什么问题,数据量大的情况下会导致redis锁住,且cpu飙升,最后有可能导致宕机。
那么我们使用redis 应该注意什么呢?危险的命令有哪几种呢?
禁止生产环境下使用keys * 这样的命令
命令的使用情况,到这个网站查询一下 :http://www.redis.cn/commands/hkeys.html
1、keys *
2、flushdb
删除Redis当前所在数据库所有的记录。
删除当前数据库里面的所有数据。
这个命令永远不会出现失败。
这个操作的时间复杂度是O(N)
,N是当前数据库的keys数量。
3、flushall
如何禁用这些命令呢?
1、通过redis配置文件
redis.conf 找到 SECURITY的区域
1)禁用命令
rename-command keys ""
rename-command flushall ""
2)重命名命令
rename-command keys "XXXXXXXXXXXXX"
rename-command flushall "asdf"
通过以上的配置就不能直接使用这些敏感命令了。