通信协议
基础协议:客户端与服务端之间的通信协议是在TCP协议之上构建的;
扩展协议:Redis制定了RESP(Redis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。
RESP发送命令格式
CRLF代表\r\n
*<参数数量> CRLF
$<参数1的字节数量> CRLF
<参数1> CRLF
...
$<参数N的字节数量> CRLF
<参数N> CRLF
RESP返回结果格式
Redis的返回结果类型分为以下五种:
状态回复:在RESP中第一个字节为"+"。
错误回复:在RESP中第一个字节为"-"。
整数回复:在RESP中第一个字节为":";当命令的执行结果是整数时,返回结果就是整数回复。
字符串回复:在RESP中第一个字节为"$";当命令的执行结果是字符串时,返回结果就是字符串回复。
多条字符串回复:在RESP中第一个字节为"*";当命令的执行结果是多条字符串时,返回结果就是多条字符串回复;第一个*数字中的数字代表返回结果的个数,后面的格式是和字符串回复一致的。
注意:无论是字符串回复还是多条字符串回复,如果有nil值,那么会返回$-1。
Java客户端Jedis
# 1. 生成一个Jedis对象,这个对象负责和指定Redis实例进行通信
Jedis jedis = new Jedis("127.0.0.1", 6379);
# 2. jedis执行set操作
jedis.set("hello", "world");
# 3. jedis执行get操作, value="world"
String value = jedis.get("hello");
Jedis还提供了类似于数据库连接池的JedisPool、同时还能使用pipeline、lua脚本等功能。
客户端管理
1.client list命令能列出与Redis服务端相连的所有客户端连接信息;
2.client setName用于给客户端设置名字,这样比较容易标识出客户端的来源;如果想直接查看当前客户端的name,可以使用client getName命令;
3.client kill此命令用于杀掉指定IP地址和端口的客户端;
4.client pause timeout,client pause命令用于阻塞客户端timeout毫秒数,在此期间客户端连接将被阻塞;
5.monitor命令用于监控Redis正在执行的命令;
客户端配置
timeout:检测客户端空闲连接的超时时间,一旦idle时间达到了timeout,客户端将会被关闭,如果设置为0就不进行检测;
maxclients:客户端最大连接数,这个参数会受到操作系统设置的限制;
tcp-keepalive:检测TCP连接活性的周期,默认值为0也就是不进行检测,如果需要设置,建议为60,那么Redis会每隔60秒对它创建的TCP连接进行活性检测,防止大量死连接占用系统资源;
tcp-backlog:TCP三次握手后,会将接受的连接放入队列中,tcpbacklog就是队列的大小,它在Redis中的默认值是511。这个参数会受到操作系统的影响;
客户端统计常用命令
info clients、info stats