redis info command

本文详细介绍了 Redis 中 INFO 命令的功能及其各个部分的含义,包括服务器信息、客户端连接状态、内存使用情况等关键指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想练习下英文阅读,翻译了下info 命令,原文:http://redis.io/commands/INFO

命令从1.0版本可用。

info命令以一种计算机和人类容易理解的方式返回服务器信息和统计信息。

可以通过下列可选参数返回部分信息:

  • server: Redis server 信息
  • clients: 客户端连接信息
  • memory: 内存使用信息
  • persistence: RDB and AOF 持久化关联信息
  • stats: 通用统计信息
  • replication: 主从信息
  • cpu: CPU 使用统计
  • commandstats: Redis command 统计
  • cluster: Redis 集群信息
  • keyspace: DB关联统计信息

还可以使用下列参数:

  • all: 返回所有部分
  • default: 返回默认部分

没有参数时相当于default。


返回值

这里是redis版本 >= 2.4的说明。

 server 部分:

  • redis_version: Redis server 版本
  • redis_git_sha1: Git SHA1
  • redis_git_dirty: Git dirty flag
  • os: 操作系统版本
  • arch_bits: 系统位数(32 or 64 bits)
  • multiplexing_api: Redis 使用的多路复用技术
  • gcc_version: 编译Redis server 的gcc版本
  • process_id: 服务器PID
  • run_id: 标示Redis server的随机值 ( Sentinel and Cluster 使用)
  • tcp_port: TCP/IP 监听端口
  • uptime_in_seconds: 从Redis server 启动到现在的秒数
  • uptime_in_days: 从Redis server 启动到现在的天数
  • lru_clock: 以分钟为单位进行自增的时钟,用于 LRU 管理

clients 部分:

  • connected_clients:已连接客户端的数量 (不包括从服务器)
  • client_longest_output_list: 当前连接的客户端当中,最长的输出列表
  • client_biggest_input_buf: 当前连接的客户端当中,最大输入缓存
  • blocked_clients: 正在等待阻塞命令的客户端数量 (BLPOP, BRPOP, BRPOPLPUSH)

memory 部分:

  • used_memory: redis分配器分配的内存字节数
  • used_memory_human: 方便阅读的数
  • used_memory_rss: OS已经分配给redis的内存数量,值和top and ps 输出一样
  • used_memory_peak: redis消耗的历史最大字节数
  • used_memory_peak_human: 方便阅读的数
  • used_memory_lua: Lua 引擎使用内存
  • mem_fragmentation_ratio:  used_memory_rss /used_memory 比值。
  • mem_allocator: 内存分配器

理想情况下 used_memory_rss 应该稍微大于used_memory.

当 mem_fragmentation_ratio较大时,表示存在(内部或外部的)内存碎片。
当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
used_memory_rss 值高通常是因为使用高峰造成的。

当redis释放内存时,是把内存交给了分配器,不一定返还给操作系统。 如果不返还,used_memory和used_memory_rss值就不一样。可以通过 used_memory_peak的值来验证 .

persistence 部分:

  • loading: 正在加载dump file标志
  • rdb_changes_since_last_save: 最后一次dump后发生的改变次数
  • rdb_bgsave_in_progress: RDB save 操作进行标志
  • rdb_last_save_time: 最后一次成功RDB save后到现在的时间戳
  • rdb_last_bgsave_status: 最后一次RDB save操作状态
  • rdb_last_bgsave_time_sec: 最后一次RDB save操作用时
  • rdb_current_bgsave_time_sec:如果存在的话,当前RDB save操作用时
  • aof_enabled: AOF 持久化启用标志
  • aof_rewrite_in_progress: AOF rewrite 进行标志
  • aof_rewrite_scheduled: 是否在RDB save操作完成后执行AOF重写标志
  • aof_last_rewrite_time_sec: 最后一次AOF rewrite 操作耗时
  • aof_current_rewrite_time_sec: 如果存在的话,当前AOF rewrite操作用时
  • aof_last_bgrewrite_status: 最后一次后台执行 AOF rewrite 操作状态

如果AOF已开启,会追加以下信息:

  • aof_current_size: AOF当前文件大小
  • aof_base_size: 最近一次启动或者重写时AOF文件大小
  • aof_pending_rewrite: 是否在RDB save操作完成后执行AOF重写标志
  • aof_buffer_length: AOF 缓冲区大小
  • aof_rewrite_buffer_length: AOF 重写缓冲区大小
  • aof_pending_bio_fsync: 后台IO队列中等待fsync的任务数
  • aof_delayed_fsync: 延迟 fsync 计数器

如果正在进行载人操作,会追加以下信息:

  • loading_start_time: 载人操作开始时间戳
  • loading_total_bytes: 文件总大小
  • loading_loaded_bytes: 已经载人字节数
  • loading_loaded_perc: 百分比表示
  • loading_eta_seconds: 完成剩余时间

stats 部分:

  • total_connections_received: 服务端收到的连接请求总数
  • total_commands_processed: 服务器已执行的命令数量
  • instantaneous_ops_per_sec: 每秒执行命令数
  • rejected_connections: 因为最大客户端数量限制而被拒绝的连接请求数量
  • expired_keys: 过期的数据库键数量
  • evicted_keys: 因最大内存容量限制而被驱逐(evict)的键数量
  • keyspace_hits: 键空间命中数量
  • keyspace_misses: 键空间未命中数量
  • pubsub_channels: 被订阅的频道数量 
  • pubsub_patterns: 被订阅的模式数量
  • latest_fork_usec: 最近一次fork操作使用的毫秒数 

replication 部分:

  • role: 主从值. 如果你复制别人,你就是从,你没复制别人,你就是主。注意你的从可能是别人的主。

如果是从,追加以下信息:

  • master_host: 主IP
  • master_port: 主监听端口
  • master_link_status: 和主的连接状态
  • master_last_io_seconds_ago: 和主最后一次交互后的秒数
  • master_sync_in_progress: 主正在复制到从标志

如果正在SYNC操作,追加以下信息:

  • master_sync_left_bytes: 操作还剩多少字节完成
  • master_sync_last_io_seconds_ago: 距最近一次操作秒数

如果主从连接挂了,追加以下信息:

  • master_link_down_since_seconds: 连接挂后多久了

The following field is always provided:

  • connected_slaves: 连接的从的数量

每个从服务器都有以下信息:

  • slaveXXX: id, IP address, port, state

cpu 部分:

  • used_cpu_sys: Redis server 使用的系统CPU
  • used_cpu_user:Redis server 使用的用户CPU
  • used_cpu_sys_children: 后台进程使用的系统CPU
  • used_cpu_user_children:后台进程使用的用户CPU

commandstats 部分显示的统计信息是基于命令类型的。包括调用次数、耗费CPU时间、每个命令平均耗费CPU。

每个不同命令都有以下信息:

  • cmdstat_XXXcalls=XXX,usec=XXX,usec_per_call=XXX

cluster 部分只有以下一个:

  • cluster_enabled: 是否使用集群标志

keyspace 部分是数据库主要字典的统计信息. 包含key数量和过期可以数量。

每个数据库都有以下信息:

  • dbXXXkeys=XXX,expires=XXX

OVER


<think>嗯,用户想了解RedisINFO命令,需要我提供详细的用途和使用指南。从用户的问题来看,ta可能是个开发者或运维人员,正在使用Redis并需要监控其状态。 INFO命令确实是Redis监控的核心工具。我记得它返回的信息分为多个模块,每个模块对应不同的监控维度。用户可能最关心的是Server、Clients、Memory、Stats这些基础模块,但ta没具体说明需要哪部分,所以最好全面覆盖。 让我先梳理INFO命令的核心价值:它提供实时监控数据,帮助诊断性能问题,比如内存不足时看Memory模块的碎片率,性能下降时看Stats模块的命令统计。运维人员还能通过Persistence模块确认RDB/AOF状态,通过Replication模块检查主从同步。 使用方式上要强调两种调用途径:命令行直接执行INFO,或者通过redis-cli工具。对于编程调用,需要演示C语言和Python的示例代码,因为用户可能是开发者。特别要注意Python的redis-py库使用info()方法,而C语言需要用redisCommand发送"INFO"字符串。 安全方面不能遗漏,如果Redis配置了密码,必须先用AUTH认证。引用[3]提到密码可以通过命令行临时设置,但重启会失效,这点要提醒用户。 输出解析是个难点。INFO返回的是原始字符串,需要解释如何分割键值对。对于大量数据,建议用户用grep过滤关键指标,比如"used_memory:"或"connected_clients"。还可以提到第三方工具如redis-stat能图形化展示这些数据。 应用场景部分,用户可能想知道如何实际使用这些数据。监控系统集成是个重点,比如Prometheus通过redis_exporter收集INFO数据。性能调优时,内存碎片率(>1.5需警惕)和命中率(<90%有问题)这些关键指标要特别说明。 最后考虑设计几个相关问题:如何自动化监控?如何应对内存不足?集群监控有什么不同?这样能引导用户深入探索。特别是Redis7新增的ALL选项和INFO整合功能值得单列说明。 需要提醒用户版本差异,比如Redis 5开始Clients模块包含客户端详情,旧版本可能没有。所有示例代码要确保语法正确,Python的decode_response=True容易遗漏,要标注清楚。</think>Redis的`INFO`命令是**核心监控工具**,用于获取服务器的实时运行状态和统计信息。以下是详细指南: --- ### **一、命令用途** 1. **系统监控** - 实时查看内存使用、客户端连接数、持久化状态、主从复制状态等关键指标。 - 诊断性能瓶颈(如内存溢出、连接数激增)。 2. **配置验证** - 确认运行时参数(如`maxmemory`、`tcp-backlog`)是否生效。 3. **运维决策** - 根据内存碎片率(`mem_fragmentation_ratio`)决定是否重启实例。 - 通过`keyspace_hits/misses`评估缓存命中率。 --- ### **二、基础使用** #### 1. **获取全部信息** ```bash redis-cli INFO # 直接返回所有模块数据 ``` 输出格式为键值对,例如: ```ini # Memory used_memory: 1024000 used_memory_human: 1000.00K # Clients connected_clients: 42 ``` #### 2. **按模块筛选** ```bash redis-cli INFO memory # 仅内存信息 redis-cli INFO replication # 仅复制信息 ``` 支持模块:`server`, `clients`, `memory`, `persistence`, `stats`, `replication`, `cpu`, `commandstats`, `cluster`, `keyspace`等。 --- ### **三、关键模块解析** | **模块** | **核心指标** | **说明** | |------------------|---------------------------------------|--------------------------------------------------------------------------| | **Memory** | `used_memory` | Redis实际内存占用(字节) | | | `mem_fragmentation_ratio` | >1.5 表示碎片严重,需重启 | | **Persistence** | `rdb_last_bgsave_status` | `ok`表示上次RDB保存成功 | | | `aof_enabled` | `1`表示AOF已开启 | | **Stats** | `total_connections_received` | 生命周期内总连接数 | | | `keyspace_hits`/`keyspace_misses` | 缓存命中率 = `hits/(hits+misses)` | | **Replication** | `role` | `master`/`slave` | | | `master_repl_offset` | 主从复制偏移量,差值过大可能触发全量同步 | --- ### **四、编程调用示例** #### 1. **Python (redis-py)** ```python import redis r = redis.Redis(password="yourpassword") # 若配置密码[^3] info = r.info(section='memory') # 获取内存模块 print(f"内存使用: {info['used_memory_human']}") ``` #### 2. **C (hiredis)** ```c redisReply *reply = redisCommand(context, "INFO memory"); if (reply->type == REDIS_REPLY_STRING) { printf("Response: %s\n", reply->str); // 原始字符串需自行解析 } freeReplyObject(reply); // 释放资源[^2] ``` --- ### **五、安全与权限** - **密码认证**:若启用`requirepass`,需先执行`AUTH password`[^3]。 - **危险命令管控**:建议通过`rename-command INFO ""`禁用默认命令名,改用自定义别名。 --- ### **六、应用场景** 1. **监控告警** 定期采集`connected_clients`、`used_memory`等指标,超出阈值触发告警。 2. **性能优化** - `commandstats`统计命令耗时,针对性优化慢查询。 - `evicted_keys` > 0 表示内存不足触发淘汰,需扩容或优化数据过期策略。 3. **故障排查** - 主从中断:检查`master_link_status`是否为`up`。 - AOF写入失败:检查`aof_last_write_status`。 --- ### **高级技巧** 1. **输出格式化** ```bash redis-cli --raw INFO | grep "used_memory:" # 提取特定指标 ``` 2. **版本差异** Redis 7.0+ 支持`INFO integration`显示模块集成信息[^4]。 3. **集群监控** 对每个节点执行`INFO cluster`,检查`cluster_state`是否为`ok`。 > 提示:生产环境建议结合Prometheus + Redis Exporter,将INFO数据转为时序指标[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值