Redis 是一个使用  ANSI C 编写的开源、基于内存、可选持久性的键值对存储数据库,被广泛应用于大型电商网站、视频网站和游戏应用等场景,能够有效减少数据库磁盘 IO, 提高数据查询效率,减轻管理维护工作量,降低数据库存储成本。对传统磁盘数据库是一个重  要的补充,成为了互联网应用,尤其是支持高并发访问的互联网应用必不可少的基础服务之一。它的主要优势有以下几方面:

  • 首先性能极高,正因为是内存型数据库,读写操作全在内存进行,因此 Redis 读写的速度能到 10 万 ops。
  • Redis 相对于其它内存数据库,还提供丰富的数据接口:如字符串(strings),  散列

(hashes),  列表(lists),  集合(sets),  有序集合(sorted sets)  等,设置包括 bitmaps,hyperloglogs 和 地理空间(geo)操作查询。这也许是大多数开发者相对于其它内存数据库选择 Redis 一个重要原因。

  • 虽然是内存型数据库,但它也提供持久化功能。

Redis 目前在 DB-Engines Ranking(https://db-engines.com/en/ranking)排名第 7,几乎所有的公有云平台都提供了 Redis 服务。虽然 Redis 性能高,但我们平时在使用 Redis 的过程中,也应该关注其运行时的状态,根据这些信息,我们一方面可以优化使用 Redis 的方法,另一方面当应用程序出现超时、响应极慢的情况时,可以进行分析。

到这里,就必须要说到 Redis 提供的一个非常有用的查看状态信息的命令:info,使用 redis-cli 连上 redis,输入 info all 命令,redis-server 就会返回 Redis 的状态信息,详细内容如下:

参数名

说明

server

获取 server 信息,包括 version, OS, port 等信息

clients

获取 clients 信息,如客户端连接数等

memory

获取 server 的内存信息,包括当前内存消耗、内存使用峰值

persistence

获取 server 的持久化配置信息

stats

获取 server 的一些基本统计信息,如处理过的连接数量等

replication

获取 server 的主从配置信息

cpu

获取 server 的 CPU 使用信息

keyspace

获取 server 中各个 DB 的 key 的数量

cluster

获取集群节点信息,仅在开启集群后可见

commandstas

获取每种命令的统计信息

其中 memory,stats,clients,keyspace 是 Redis 运行时经常要关注的信息,能

够有效帮我们本文重点对这四栏中我们需要详细了解的信息。

一、深度剖析 Redis 最重要的 memory

对于 Redis 来说,内存是最重要的资源,所以本文首先介绍 Redis 内存状态信息怎么查看, 也就是 memory 这一栏:

  • used_memory:Redis 分配器分配的内存量,也就是实际存储数据的内存总量。
  • used_memory_human:以可读格式显示 used_memory。
  • used_memory_rss:以操作系统的角度,显示 Redis 进程占用的总物理内存。
  • used_memory_rss_human:以可读格式显示 used_memory_rss
  • mem_fragmentation_ratio:used_memory_rss /used_memory 比值,表示内存碎片率。其中 used_memory 反映了当前 Redis 存储数据的内存使用情况,当内存使用率达到

Redis 设置的 maxmemory 时,Redis 就会根据设置内存数据逐出策略,以不同的方式移除存储在内存中的数据。比如,如果设置的策略为 noeviction,那么 Redis 会直接返回错误提示。

mem_fragmentation_ratio 表示的内存碎片率,理解这一指标,对优化 Redis 实例的资源性能是非常重要的。内存碎片率稍大于 1 是比较合理的范围,此时内存碎片率还比较低,同时也说明  Redis 没有发生  swap。但如果内存碎片率的值超过了  1.5,那就说明

Redis 消耗了实际需要物理内存的  150%,其中有  50%是内存碎片率,可以直接判定为

Redis 内存碎片过大。内存碎片率是不是越低就越好呢?答案是否定的。当内存碎片率低于 1 时,说明 Redis 内存分配超出了物理内存,操作系统正在进行 swap,Redis 可能会把部分数据交换到硬盘上。swap 会严重影响 Redis 的性能,造成极大的延迟。

二、stats 帮你全面理解 Redis 状态

stats 可以统计 Redis 的基础信息,比如 Redis 的连接数、命令、网络、同步状态等非常重要的信息。下面介绍以下几个比较重要的信息:

  • total_connections_received:连接过的客户端总数。
  • total_commands_processed:处理过的命令总数。
  • instantaneous_ops_per_sec:每秒处理的命令数。
  • keyspace_hits:keyspace 命中次数。
  • keyspace_misses:keyspace 未命中次数。
  • rejected_connections:由于 maxclients 限制而拒绝的连接数量。
  • expired_keys:key 过期事件的总数。
  • evicted_keys:由于 maxmemory 限制,而被回收内存的 key 的总数。

total_connections_received 和 total_commands_processed 反映了 Redis 服务器自从启动以来,所有处理过的连接数和命令数。instantaneous_ops_per_sec 反应了 Redis 服务器的忙碌状态。当 rejected_connections 的值不为 0 时,说明应用的连接数过多, 或者 maxclients 配置的太小。

对于应用来说,  keyspace_hits 和  keyspace_misses 这两项指标是非常关键的。

Redis 对其所有的命令都设置了专门的标识属性,如“只读”,“写”或者“管理命令”之类,在 Redis 源码中,查看一下 redisCommand 结构体中 sflags 成员属性字段,就可以知道这个命令是具有哪些属性。比如,w 表示一个写命令(如  set,del 命令),r 表示是一个只读命令( get , hmget 命令), a 则表示一个管理命令(config,shutdown) 。其中

keyspace_hits 和 keyspace_misses 都是针对具备只读属性的 Redis 操作命令做统计,如果 info 统计出来的 keyspace_misses 值过高,或者在过去一段时间内增长很快,那么就说明这一段时间从  Redis 中获取数据都没有拿到,这时也许就需要检查一下应用数据在

Redis 中的存放和访问情况了。如果 key 在明确的时间周期内被使用,或者旧的 key 将来可能不会被使用,就可以用 Redis 过期时间命令(expire,expireat, pexpire, pexpireat 等)去设置过期时间,这样  Redis 就会在  key 过期时自动删除  key,这个信息可以通过

expired_keys 去查看。当内存使用达到设置的最大阀值 maxmemory 时,Redis 则会根据设置的 key 逐出策略,淘汰 Redis 中存储的数据,这个信息可以根据 evicted_keys 查看。

三、解读 Redis 连接数的意义

clients 包含了连接数,输入输出缓冲和阻塞命令连接数等情况。

  • connected_clients:客户端连接的数量。
  • client_longest_output_list:当前的客户端连接之中最长的输出列表。
  • client_biggest_input_buf:当前的客户端连接之中最大的输入缓冲区。
  • blocked_clients:由于阻塞调用(BLPOP、BRPOP、BRPOPLPUSH)而等待的客户端的数量。

连接数其实对于 Redis 来说可以看做是一种有限资源,一般 Redis 都配置有最大连接

数 限 制 , 因 此 了 解 这 个 对 于 确 保 应 用 正 常 连 接 也 是 相 当 重 要 的 。

client_longest_output_list 过高则很可能说明现在 Redis 出现了异常,可能要结合clients list 来排查客户端连接情况。使用了阻塞命令时,blocked_clients 也需要重点关注。

四、Keyspace 帮你了解数据状态

Keyspace 主要提供关于每个 Redis 数据库的主字典的统计数据。这些统计数据包括键的数量、具有过期时间的 key 的数量和平均生存时间。对于每个数据库来说,

keyspace 栏显示的每行信息格式如下所示: dbX: keys=X,expires=X,avg_ttl=X

其中,第一个 X 表示数据库的编号,第二个 X 表示键的数量,第三个 X 表示具有过期时间的键的数量,第四个 X 表示键的平均生存时间。举个例子:

db0:keys=6,expires=0,avg_ttl=0:这就表示当前数据库 0 的 key 总数有 6 个,带有过期时间的 key 总数 0 个,平均存活时间为 0。

Redis Info 命令的其它信息,在这里也简要介绍一下:如 server 栏,是会显示关于 Redis 服务器自身的一些信息, 如版本号, 操作系统, 端口等。Persistence 和

replication 则与数据库持久化和主备复制有关,cpu 反映了 Redis 服务器 CPU 使用信息,

commandstas 是显示  Redis 所有命令执行的详细信息,包括命令调用次数、命令消耗的

CPU 时间总量、每次执行命令消耗 CPU 时间的平均值。Cluster 主要用来反应集群特性。关于更多 Redis 的使用指南,可以到华为云 Redis 官网上了解,也可以试用免费的

Redis    ,    来    体    验    一    下    内    存    数    据    库    的    使    用    感    受    :

http://www.huaweicloud.com/product/dcs.html。分布式缓存服务  DCS 是华为云上的

Redis 内存数据库服务,基于双机热备的高可用架构,拥有丰富的缓存类型,能够很好地满足用户高读写性能及快速数据访问的业务诉求。分布式缓存服务能够有效加快应用的处  理速度,提升热点数据访问速度,大幅降低数据库读写频率,降低业务对整体架构的压力, 具有高可靠、在线扩展、一键运维等特点。

Redis 使用指南:深度解析 info 命令的更多相关文章

  1. Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...

  2. redis入门指南(七)—— 安全、协议、管理工具及命令属性

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 安全 1.可以使用bind参数绑定一个地址,使redis只接受这个地址的连接. 2.使用requ ...

  3. redis入门指南(二)—— 数据操作相关命令

    写在前面 以下绝大部分内容取材于<redis入门指南>,部分结合个人知识,实践后得出. 只记录重要,明确,属于新知的相关内容,杜绝冗余和重复. 字符串 1.字符串类型是redis中最常见的 ...

  4. redis入门指南(三)—— 事务、过期时间、SORT命令、消息通知与管道

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...

  5. Kafka深度解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

  6. Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合 引言 开篇<Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍>已经介绍了 Redis 的 ...

  7. Kafka深度解析(如何在producer中指定partition)(转)

    原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...

  8. Redis 小白指南(一)- 简介、安装、GUI 和 C# 驱动介绍

    Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍 目录 简介 安装 入门指令 GUI 工具 C# 驱动介绍 简介 ANSI C 编写,开源,基于内存,可持久化,一个键值对的数据库, ...

  9. Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

    Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...

随机推荐

  1. Gym - 100199C

    Gym - 100199C 题意: 其实这么长的英文题面就是想告诉我们这个题是丢手绢. 解法: 找到与 $ N $ 互质的最大整数 $ K $ 即可.当 $ N $ 为奇数时, $ \frac{N-1 ...

  2. 64位linux下玩32位汇编编程

    利用下假期,打算把linux下的汇编语言给熟悉下,结果是以32位为版本的,只能在办公室的机器上跑了个opensuse的32位版本,家里的suse挂了,无法输入中文.打算再安装下32位系统,今天找到了个 ...

  3. java实现磁盘先来先服务算法

    package demo; import java.awt.List; import java.util.ArrayList; import java.util.Arrays; public clas ...

  4. GA函数优化

    一.遗传算法简介         遗传算法(Genetic Algorithms,GA)是1962年美国人提出,模拟自然界遗传和生物进化论而成的一种并行随机搜索最优化方法. 与自然界中“优胜略汰,适者 ...

  5. python-30个骚操作

    1.冒泡排序     2.计算x的n次方的方法     3.计算a*a + b*b + c*c + ……     4.计算阶乘 n!             5.列出当前目录下的所有文件和目录名   ...

  6. oracle数据库使用PL/sql导入excel数据

    1.打开PL/SQL工具,菜单进入   工具>ODBC导入器(菜单列表倒数第二): 2.连接数据库与选择导入的excel文件表: 3.选择导入的表以及excel与数据库表字段之间的对应关系:

  7. CSS3常用属性及效果汇总

    本文转载于<https://blog.csdn.net/lyznice/article/details/54575905> 一.2D效果属性 要使用这些属性,我们需要通过 transfor ...

  8. Linux-文件系统的简单操作

    文件系统的简单操作 磁盘与目录的容量:df.du df [option] [目录或文件名] 参数: -a:列出所有的文件系统,包括系统特有的/proc等系统 -k:以KB的容量显示各文件系统 -m:以 ...

  9. 5G 与 MEC 边缘计算

    目录 文章目录 目录 前言 参考文献 通信网络 核心网演进之路 早古时期 2G 网络架构 3G 网络架构 4G 网络架构 5G 5G 网络的需求 5G 网络架构的设计原则 5G 网络的逻辑架构 5G ...

  10. [dart学习]第六篇:流程控制语句

    经过前面的基础知识了解学习,我们今天可以进入语句模块啦. dart主要有以下流程控制语句: if-else for循环 while和do-while循环 break和continue switch-c ...