一、安全

1.可信环境

Redis的安全设计是在“Redis运行在可信环境”这个前提下做出的。生产环境运行时不能允许外界直接连接到Redis服务器上,应该通过应用程序中转。Redis默认配置接收任何地址发来的请求,更改这一配置的方式:

bind 127.0.0.1

2.数据库密码

设置配置文件中的requirepass参数

requirepass mypassword

3.命名命令

Redis支持在配置文件中将命令重命名,保证自己应用可以使用该命令

//重命名FLUSHALL命令
rename-command FLUSHALL 99292929

//将命令重命名为空字符串来禁用命令
rename-command FLUSHALL ""

二、通信协议

Redis支持两种通信协议,一种是二进制安全的统一请求协议(unified request protocal),另一种是比较直观的便于在telnet程序中输入的简单协议。两种协议命令格式有区别,返回值格式一样。

1.简单协议

简单协议适合在telnet程序中和Redis通信。简单协议的命令格式就是将命令和各个参数使用空格分隔

2.统一请求协议

telnet 127.0.0.1 6379

SET foo bar
  • 错误回复:以-开头并在后面跟错误信息,最后以\r\n结尾
  • 状态回复:以+开头并在后面跟状态信息,最后以\r\n结尾
  • 整数回复:以:开头并在后面跟数字,最后以\r\n结尾
  • 字符串回复:以$开头并在后面跟字符串长度,并以\r\n分隔,接着是字符串的内容和\r\n
  • 多行字符串回复:以*开头,并在后面跟上字符串回复数组,并以\r\n分隔。接着是字符串回复的具体内容

3.统一命令请求协议

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

Redis的AOF文件和主从复制时主数据库向从数据库发送的内容都使用了统一请求协议,如果要开发一个和Redis直接通信的客户端,推荐使用此协议。如果只是想通过telnet向Redis发送命令则使用简单协议即可。

三、管理命令

1.耗时命令日志

当一条命令执行时间超过限制时,Redis会将该命令写入耗时命令日志(show log)。可以通过showlog-log-slower-than参数设置这一限制,单位是微妙,默认10000.
查看操作:

>showlog get
1) 1)(integer)4
	2)(integer)1256806413
	3)(integer)58
	4)1)"get"
		2)"foo"

每条日志由4部分组成
(1).该日志唯一ID
(2),该命令执行的UNIX时间
(3).该命令的耗时时间,单位微妙
(4).命令及参数

2.命令监控

Redis 提供了MONITOR命令来监控Redis执行所有命令,redis-cli同样支持这个命令,如在redis-cli中执行MONITOR

>MONITOR
OK

这时Redis执行的任何命令都会在redis-cli中打印出来。很耗性能,仅供调试。