3 Redis 进阶
3.1 Redis 数据备份与恢复
命令 | 描述 |
---|---|
SAVE | 创建当前数据库的备份,在 Redis 安装目录创建 dump.rdb 文件 |
CONFIG GET dir | 获取 Redis 安装目录。将备份文件 dump.rdb 移动到安装目录并启动服务即可 |
BGSAVE | 在后台执行命令,创建 Redis 备份文件 |
3.2 Redis 安全
- 通过配置文件设置密码,使得客户端连接到 Redis 服务需要密码验证
命令 | 描述 |
---|---|
CONFIG get requirepass | 查看是否设置了密码验证。默认 requirepass 参数为空,即无需密码 |
CONFIG set requirepass password | 设置密码。之后客户端连接 Redis 服务需要密码验证 |
AUTH password | 输入密码验证 |
3.3 Redis 性能测试
- 通过同时执行多个命令实现性能测试
- 基本命令
redis-benchmark [option] [option value]
- 在 Redis 安装目录下执行
- 不是 Redis 客户端的内部命令
可选参数 | 描述 | 默认值 |
---|---|---|
-h | 指定服务器主机名 | 127.0.0.1 |
-p | 指定服务器端口 | 6379 |
-s | 指定服务器 socket | - |
-c | 指定并发连接数 | 50 |
-n | 指定请求数 | 10000 |
-d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
-k | 1=keep alive 0=reconnect | 1 |
-r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | - |
-P | 通过管道传输 numreq 请求 | 1 |
-q | 强制退出 redis。仅显示 query/sec 值 | - |
–csv | 以 CSV 格式输出 | - |
-l | 生成循环,永久执行测试 | - |
-t | 仅运行以逗号分隔的测试命令列表 | - |
-I | Idle 模式。仅打开 N 个 idle 连接并等待 | - |
3.4 Redis 客户端命令
- Redis 通过监听一个 TCP 端口或 Unix socket 方式接收来自客户端的连接。建立一个连接后,Redis 内部会进行
- 客户端 socket 被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型
- 为该 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
- 创建一个可读的文件事件用于监听该客户端 socket 的数据发送
- 最大连接数: Redis 2.4 中,最大连接数被硬编码到代码内部。2.6 之后可配置
CONFIG get maxclients
查看最大连接数CONFIG set maxclients 1000
修改最大连接数redis-server --maxclients 10000
在服务启动时设置最大连接数
命令 | 描述 |
---|---|
CLIENT LIST | 返回连接到 Redis 服务的客户端列表 |
CLIENT SETNAME | 设置当前连接的名称 |
CLIENT GETNAME | 获取通过 CLIENT SETNAME 命令设置的服务名称 |
CLIENT PAUSE | 挂起客户端连接,指定挂起的时间以毫秒计 |
CLIENT KILL | 关闭 |
3.5 Redis 管道技术
- Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务。一般步骤
- 客户端向服务端发送一个查询请求,并监听 socket 返回。通常以阻塞模式,等待服务端响应
- 服务端处理命令,将结果返回给客户端
- Redis 管道技术可在服务端未响应时,客户端可继续向服务端发送请求,并最终一次性读取所有服务端的响应
- 管道技术提高了 Redis 服务的性能
3.6 Redis 分区
- 分区是分割数据到多个 Redis 实例的处理过程。每个实例只保存 key 的一个子集
- 优势
- 通过利用多台计算机内存的和值,使得可以构造更大的数据库
- 通过多核和多台计算机,支持扩展计算能力;通过多台计算机和网络适配器,支持扩展网络带宽
- 不足
- 通常不支持涉及多个 key 的操作。如,当两个 set 映射到不同的 Redis 实例上时,不能对两个 set 做交集操作
- 不能使用涉及多个 key 的 Redis 事务
- 数据处理复杂。如,需要处理多个 rdb/aof 文件,并且从多个实例和主机备份持久化文件
- 增删容量复杂。Redis 集群大多支持在运行时增删节点的透明数据平衡能力。类似于客户端分区、代理等其他系统则不支持此特性。可参考 presharding 技术
- 分区类型
- 范围分区:映射一定范围的对象到特定的 Redis 实例
- 不足:要有一个区间范围到实例的映射表,要管理表和各种对象的映射表
- 哈希分区:对任何 key 都适用。操作方法
- 用一个 hash 函数将 key 转换为一个数字
- 对整数取模(按照 Redis 实例数目),从而映射到其中一个 Redis 实例