Redis 入门指南(五)管理

5. 管理

5.1 安全

        Redis以简洁为美,在安全层面没有做太多的工作。

5.1.1 可信的环境

        在生产环境运行时,不能允许外界直接连接到Redis服务器上,而应该通过应用程序中转,运行在可信的环境中是保证Redis安全的最重要方法。

         Redis的默认配置会接受来自任何地址发来的请求,即在任何一个拥有公网IP的服务器上启动Redis服务器,都可以被外界直接访问到。要更改这一设置,在配置文件中修改bind参数,如只允许本机应用连接Redis,可以将bind参数改成:bind 127.0.0.1

        bind参数只能绑定一个地址,如果想更*地设置访问规则需要通过防火墙来完成。

5.1.2 数据库密码

        通过配置文件中的requirepass参数为Redis设置一个密码,客户端每次连接到Redis时都需要发送密码,否则Redis会拒绝执行客户端发来的命令。

        由于Redis的性能极高,并且输入错误密码后Redis并不会进行主动延迟(考虑到Redis的单线程),所有攻击者可以通过穷举法**Redis的密码(1秒内能够尝试十几万个密码),因此在设置时一定要选择复杂的密码。

5.1.3 命令命名

        Redis支持在配置文件中将命令重命名,比如将CONFIG命令重命名成一个比较复杂的名字,以保证只有自己的应用可以使用该命令。

Redis 入门指南(五)管理

        如果希望直接禁用某个命令可以将命令重命名为字符串。

        注意 无论设置密码还是重命名命令,都需要保证配置文件的安全性,否则就没有任何意义了。

5.2 通信协议

        Redis支持两种通信协议:二进制安全的统一请求协议(undefined request protocol);比较直观便于在telnet程序中输入的简单协议。

5.2.1 简单协议

        适合在telnet程序中和Redis通信。它的格式就是将命令和各个参数使用空格隔开,如“exists foo”、“set foo bar”等。由于Redis解析简单协议时只是简单地以空格分隔参数,所以无法输入二进制字符。可以通过telnet程序测试。

Redis 入门指南(五)管理

5.2.2 统一请求协议

        从Redis1.2开始加入,其命令格式和多行字符串回复的格式很类似,如set foo bar的统一请求协议写法是:*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\nbar\r\n,还是使用telnet进行演示。

Redis 入门指南(五)管理

        Redis的AOF文件和主从复制时主数据库向从数据库发送的内容都使用了统一请求协议。如果只是想通过telnet向Redis服务器发送命令则使用简单协议就可以了。

5.3 管理Redis时非常有用的几个命令

5.3.1 耗时命令日志

        当一条命令执行时间超过限制时,Redis会将该命令的执行时间等信息加入耗时命令日志(slow log)以便开发者查看。可以通过配置文件的slowlog-log-slower-than参数设置这一限制,单位微秒(1 000 000微妙相当于1秒),默认值是10 000。耗时命令日志存储在内存中,可以通过配置文件slow-log-max-len参数来限制记录的条数。

5.3.2 命令监控

        MONITOR命令来监控redis执行的所有命令。会打印出MONITOR开启之后执行的所有命令。

        MONITOR命令非常影响Redis的性能,一个客户端使用MONITOR命令会降低redis将近一半的负载能力。所以MONITOR命令只适合用来调试和纠错。