作为程序员一定要保持良好的睡眠,才能好编程

一个致命的Redis命令,导致程序员被开除

发布时间:2019-04-02

什么样的Redis命令会有如此威力,造成这样的后果?


某技术公司技术执行了 keys * 这样的命令后,导致了redis 锁住,Cpu飙升,引起了所有支付链路被卡住,等几十秒结束后,所有请求流量挤压到了dbs数据库中,使数据库产生了雪崩的效应,发生了数据库宕机事件。


执行keys *的程序员被开除。



对Redis稍微有点使用经验的人都知道线上是不能使用keys * 相关命令的,虽然其模糊搜索匹配功能使用非常简单,在小数据情况下使用也没有什么问题,数据量大的情况下会导致redis锁住,且cpu飙升,最后有可能导致宕机。




那么我们使用redis 应该注意什么呢?危险的命令有哪几种呢?




禁止生产环境下使用keys * 这样的命令


命令的使用情况,到这个网站查询一下 :http://www.redis.cn/commands/hkeys.html


1、keys *

搜狗截图20190402081142.png



2、flushdb


删除Redis当前所在数据库所有的记录。

删除当前数据库里面的所有数据。

这个命令永远不会出现失败。

这个操作的时间复杂度是O(N),N是当前数据库的keys数量。




3、flushall


flushall.png



如何禁用这些命令呢?


1、通过redis配置文件


redis.conf  找到  SECURITY的区域


1)禁用命令

    

rename-command keys ""

rename-command flushall ""


2)重命名命令


rename-command keys "XXXXXXXXXXXXX"

rename-command flushall "asdf"


通过以上的配置就不能直接使用这些敏感命令了。