一、 常见故障分析
1. 内存过高分析
- info 命令查看key总数是否大量增加,占用内存是否大量增加
- redis-cli -h host -p port client list | grep -v "omem=0",查询输出缓冲区不为0的客户端连接,omem字段为占用的内存量(B),cmd字段为命令,从client_longest_output_list看是否输出缓冲区占用内存较大,也就是有大量的数据从Redis服务器向某些客户端输出。参考 https://carlosfu.iteye.com/blog/2254571
2. CPU高分析
client list中后面有命令,具体的话就要看monitor(monitor消耗cpu也高,不能执行太久)。client list就是看执行那一时间点的,monitor就全些。
看都执行了什么命令(看cmd=部分),有没有消耗CPU的一些异常命令。一般引起CPU高都是一下子取很多值的,从之前的异常排查来看,还是getall,keys *这类的命令最消耗CPU
新建连接和每秒的操作数量增加也会CPU增加
3. 压测时主要关注项
- 慢日志:slowlog get
- ops数:info stats,查看 instantaneous_ops_per_sec 指标。一般可以支撑每秒6到8K,如果只有几百几十,说明操作很少,那一般就不是redis的问题
二、 常用命令
1. 启停命令
Linux启动
$redis-server $REDIS_DATA/conf/redis.conf
Windows启动
$redis-server –-console
Windows && Linux停止
$redis-cli –p port –a passwd shutdown save
2. 实例管理
检查连接情况
client list
库中KEY的数量
info keyspace
检查主从同步状态,看master_link_status,slave_repl_offset与master_repl_offset
info replication
DB中键的数量
dbsize
切换数据库(redis用数字作为多个数据库的实现,默认16个,编号为0-15)
select db号
清除所有数据库(高危)
flushall
清除当前数据库(高危)
flushdb
3. 慢查询
两个参数
- slowlog-log-slower-than 10000 慢查询捕获阈值(默认10000微秒)
- slowlog-max-len 128 慢日志最多存储条数(默认128,超过后先进先出)
获取慢日志
- slowlog get [n] n指定条数
慢日志格式
- 慢查询日志标识id
- 发生时间戳
- 命令耗时(微秒)
- 执行命令
- 命令参数
获取慢日志列表长度
- slowlog len
慢日志重置
- slowlog reset
4. 配置管理
支持两种修改配置方法:
- 改配置文件
- config set 动态修改,并将配置持久化到本地文件
-- 参数设置
config set slowlog-max-len 1000
-- 将配置持久化到本地文件
config rewrite
获取配置信息
- CONFIG GET CONFIG_SETTING_NAME
获取所有配置
- CONFIG GET *
5. 客户端相关
列出连接到redis服务端的客户端信息
- client list(执行较慢,连接数较多时频繁执行可能阻塞redis)
- info clients(执行较快,不能精确定位到所有客户端,只能显示输入缓冲区最大值)
设置客户端名
- client setName xx
- client getName
杀掉指定IP地址和端口的客户端
- client 127.0.0.1:52343