https://www.cnblogs.com/hwpaas/p/9442410.html

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 使用指南:深度解析 info 命令

    Redis 是一个使用  ANSI C 编写的开源.基于内存.可选持久性的键值对存储数据库,被广泛应用于大型电商网站.视频网站和游戏应用等场景,能够有效减少数据库磁盘 IO, 提高数据查询效率,减轻管 ...

  2. [转帖]深度解析区块链POW和POS的区别

    深度解析区块链POW和POS的区别 Proof of Work 还有Proof of Stake 之前理解程了 state ... 股权的意思 还有 delegated proof of Stake ...

  3. Kafka深度解析

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

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

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

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

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

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

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

  7. 程序员收藏必看系列:深度解析MySQL优化(二)

    程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而 ...

  8. Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

    前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...

  9. Flink 源码解析 —— 深度解析 Flink 序列化机制

    Flink 序列化机制 https://t.zsxq.com/JaQfeMf 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac 上搭 ...

  10. Flink Connector 深度解析

    作者介绍:董亭亭,快手大数据架构实时计算引擎团队负责人.目前负责 Flink 引擎在快手内的研发.应用以及周边子系统建设.2013 年毕业于大连理工大学,曾就职于奇虎 360.58 集团.主要研究领域 ...

随机推荐

  1. 如何花“一点点小钱”突破华为云CCE服务的“防线”

    摘要:有没有方法绕开CCE的限制,自由的调用K8s的API呢?有还便宜,2.4元/集群/天. 申明:所有的一切都是为了使得华为云可以更好,而不是为了diss它. 通过华为云购买多个K8s集群,又想使用 ...

  2. JDK1.6中String类的坑,快让我裂开了…

    摘要:JVM优化的目标就是:尽可能让对象都在新生代里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收. 本文分享自华为云 ...

  3. 复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案

    摘要:复杂查询so easy!GaussDB(for Cassandra)新特性来袭. 本文分享自华为云社区<来了!GaussDB(for Cassandra)新特性亮相>,作者:Gaus ...

  4. aPaaS将如何改变软件行业?

    摘要:当SaaS在云计算中的占比越来越高的时候,几乎所有软件厂商言必谈SaaS,各大云厂商.咨询机构也都将目光瞄准了SaaS.如此火爆的现象背后,真实情况如何呢? 本文分享自华为云社区<[开天a ...

  5. iOS应用程序发布流程:从测试到上架的完整指南

    ​ 目录 转载:iOS应用程序的签名.重签名和安装测试 前言 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 转载:iOS应用程序的签名.重签名和安装测试 前言 ipa ...

  6. 火山引擎在行为分析场景下的ClickHouse JOIN优化

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 火山引擎增长分析DataFinder基于ClickHouse来进行行为日志的分析,ClickHouse的主要 ...

  7. 构造函数中,获取yml中的参数

    成员变量的注入是在Bean创建成功之后,通过setter方法进行注入的.所以下面会获取不到值 @RestController public class VipsoftImController { @A ...

  8. Github 自建一个 Helm Charts 库

    前言 在构建私有的 charts 仓库之前,有几个先决条件: Helm 已经安装,版本号是 v3 拥有一个 Github 账号 初始化仓库 在 github 仓库上新建一个仓库,我这里命名为 helm ...

  9. linux tar解压命令总结

    把常用的tar解压命令总结下,当作备忘: -c:建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可 ...

  10. 【JAVA基础】JAVA基础知识整理

    https://www.weixueyuan.net/java/rumen_1/ JAVA的三大版本 JDK.JRE.JVM JAVA安装与卸载 JDK结构 HelloWorld运行 编译型与解释型 ...