安全
查看是否设置密码1
2
3
4
5127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
# 默认没有设置
设置密码1
2
3
4
5127.0.0.1:6379> CONFIG set requirepass "mypassword"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "mypassword"
设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。
1 | 127.0.0.1:6379> AUTH "mypassword" |
性能测试
Redis 性能测试是通过同时执行多个命令实现的redis-benchmark [option] [option value]
1 | redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q |
客户端连接
Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:
- 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
- 然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
- 然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送
1 | config get maxclients |
启动时设置最大连接数1
redis-server --maxclients 100000
管道技术
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。1
2
3
4
5
6
7
8$(echo -en "PING\r\n SET MYkey redis\r\nGET MYkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3