Redis作为高性能的内存数据库,其命令行的检查命令是运维和开发人员日常工作中不可或缺的工具,通过这些命令可以快速了解Redis的运行状态、内存使用、客户端连接、持久化情况等关键信息,以下从多个维度详细介绍Redis的常用检查命令。

在基本信息检查方面,INFO
命令是最核心的工具,它返回Redis服务器的各种信息和统计,通过INFO [section]
可以指定查看特定部分的信息,例如INFO server
返回服务器基本信息(如版本号、运行时长、进程ID),INFO memory
展示内存使用详情(如已用内存、峰值内存、内存碎片率),INFO clients
显示客户端连接数(包括连接的客户端地址、名称、命令执行数等),INFO stats
提供通用统计信息(如总命令数、连接数限制、拒绝连接数),若不指定section,默认返回所有信息,但输出内容较长,建议按需查询。
内存使用检查是Redis优化的重点,除INFO memory
外,MEMORY USAGE key [SAMPLES count]
命令可精确查看某个键的内存占用,例如MEMORY USAGE mylist
返回列表键mylist
的内存大小,添加SAMPLES
参数可通过采样估算复杂类型(如哈希、集合)的内存占用,减少对性能的影响。MEMORY STATS
则以更详细的方式返回内存分配器的统计信息,包括已用内存、峰值内存、内存碎片率等,帮助判断内存是否存在泄漏或碎片化问题。DBSIZE
命令返回当前数据库的键数量,快速了解数据规模。
客户端连接检查对于排查性能瓶颈和异常连接至关重要。CLIENT LIST
列出所有连接到Redis的客户端信息,包括客户端ID、地址、端口、连接时间、最后执行命令、缓冲区使用情况等,例如通过CLIENT LIST | grep "idle"
可查看空闲连接,识别长时间占用连接的客户端。CLIENT GETNAME
和CLIENT SETNAME name
分别用于获取和设置客户端名称,方便标识和管理不同客户端的连接。CLIENT KILL addr:port
可强制断开指定地址和端口的客户端连接,用于清理异常或恶意连接。
持久化状态检查涉及Redis数据安全。LASTSAVE
返回最后一次成功执行持久化(RDB或AOF)的时间戳,通过date -d @timestamp
可转换为可读时间,判断持久化是否正常执行,对于AOF持久化,INFO persistence
中的aof_current_size
和aof_base_size
分别显示当前AOF文件大小和上次启动时的大小,aof_rewrite_in_progress
和aof_rewrite_scheduled
则反映AOF重写状态,帮助监控AOF重写是否卡住或延迟。BGSAVE
和BGREWRITEAOF
命令虽用于触发持久化,但也可通过检查后台进程状态(如INFO stats
中的rdb_last_bgsave_status
)判断持久化是否成功。

性能与统计检查方面,SLOWLOG [get count]
用于查询慢查询日志,例如SLOWLOG get 5
返回最近5条执行时间超过slowlog-log-slower-than
阈值的命令,帮助定位性能瓶颈。INFO stats
中的instantaneous_ops_per_sec
显示每秒操作数,实时监控服务器负载;total_connections_received
和rejected_connections
分别记录总连接数和被拒绝的连接数,判断服务器是否达到连接数上限。
命令类别 | 常用命令 | 功能说明 |
---|---|---|
基本信息检查 | INFO [section] | 查看服务器版本、运行时长、内存、客户端等综合信息 |
内存使用检查 | MEMORY USAGE key [SAMPLES count] | 查看指定键的内存占用,支持采样估算复杂类型内存 |
MEMORY STATS | 返回内存分配器的详细统计信息,包括碎片率等 | |
DBSIZE | 返回当前数据库的键数量 | |
客户端连接检查 | CLIENT LIST | 列出所有客户端连接的详细信息(地址、连接时间、缓冲区等) |
CLIENT KILL addr:port | 强制断开指定地址的客户端连接 | |
持久化状态检查 | LASTSAVE | 返回最后一次成功持久化的时间戳 |
INFO persistence | 查看RDB和AOF的持久化状态,如文件大小、重写进度等 | |
性能与统计检查 | SLOWLOG [get count] | 查询慢查询日志,定位执行慢的命令 |
INFO stats | 获取每秒操作数、连接数统计等性能指标 |
相关问答FAQs
Q1: 如何通过命令快速定位Redis中内存占用最大的键?
A1: 可以结合MEMORY USAGE
命令和SCAN
遍历所有键进行排序,具体步骤为:使用SCAN 0
遍历所有键,对每个键执行MEMORY USAGE
获取内存大小,将结果按内存占用降序排序,例如通过脚本实现:redis-cli --scan --pattern "*" | while read key; do echo "$(redis-cli MEMORY USAGE "$key") $key"; done | sort -nr | head -n 10
,该命令会输出内存占用前10的键及其大小。
Q2: Redis的INFO memory
中的mem_fragmentation_ratio
过高或过低可能是什么原因?如何处理?
A2: mem_fragmentation_ratio
是已用内存与物理内存的比值,正常范围在1.0~1.5之间,若过高(如>1.5),通常因内存碎片化(频繁分配释放不同大小内存导致),可通过重启Redis释放碎片;若过低(如<1.0),可能因Redis使用了swap(交换空间),需检查系统内存是否不足,或调整maxmemory
避免Redis过度占用内存,禁用THOO
淘汰策略(maxmemory-policy
)也可能减少碎片,但需结合业务场景调整。