六大免费的Redis内存分析工具

news2024/11/15 10:33:58

在我们需要分析Redis实例的内存使用情况时,市场上有着许多免费的开源工具,同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话,就可能需要用到一些更具针对性的“独门”工具了。

【推荐】六大免费的Redis内存分析工具

【51CTO.com快译】在我们需要分析Redis实例的内存使用情况时,市场上有着许多免费的开源工具,同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话,就可能需要用到一些更具针对性的“独门”工具了。

我们在本文中为您推荐了六种实用工具,它们曾被我们用来分析自己的Redis实例。它们分别是:

  1. Redis Memory Analyzer(Redis内存分析器,RMA)
  2. Redis Sampler(Redis采样器)
  3. RDB Tools(RDB 工具集)
  4. Redis-Audit(Redis-审计)
  5. Redis Toolkit(Redis工具包)
  6. Harvest

1.Redis Memory Analyzer  

在Redis内存分析领域,RMA(Redis内存分析器)是最全面的FOSS(译者注:Free and Open Source Software,免费且开源的软件)之一。它支持三种不同的级别模式,分别是:

  • 全局 – 显示内存使用信息的概述。
  • 扫描器 – 显示***级别键值空间(keyspace)和前缀(prefix)的内存使用信息 - 换言之,使用最短的通用前缀(common prefix)。
  • RAM – 显示***级键值空间和前缀 - 换言之,使用最长的通用前缀。

每一种模式都有自己的用途,您可以在RMA的自述文件(https://github.com/gamenet/redis-memory-analyzer/blob/master/README.rst)中获取进一步的详细信息.

RMA - 全局模式 

在全局模式下,RMA 提供了一些高级别的统计信息,如键数、系统内存、驻留集的大小、键值空间的大小等。值得一提的是其特殊功能:“键值空间开销”,这是Redis系统用来存储与键值空间相关信息的内存数量,例如列表数据结构中的指针数量。

RMA - 扫描器模式 

在扫描器模式中,我们能够获取键值空间的概述。它给出了高级别的命名空间(因此,a:b:1和a:c:1合并为a:*),同时带有各种条目的类型,及其命名空间所占用内存的百分比。该模式可作为分析的起点,然后使用下面的“RAM”模式进行详细的分析。

RMA - RAM模式 

在RAM模式下,我们得到键值空间级别的内存开销值,当然大多数其他开源的内存分析工具也能提供。因此,此处将a:b:1和a:c:1分别当作a:b:*和a:c:*,我们从而得到有关内存使用、实际数据大小、开销、编码、最小和***TTL等方面的详细信息。这些都有助于我们查出那些系统中内存消耗“大户”。

不过,此工具长久未被更新了(在GitHub上的***一次提交是在一年多以前)。即便如此,它仍然是我们进行详细分析的***工具之一。

RMA的安装和使用:

RMA需要在系统上事先安装好Python和PIP(译者注:Python的包管理工具),两者一般都被预安装在了主流的操作系统之上。安装完毕后,您可以执行一条“pip install rma”的命令来安装RDB工具。

您可以很容易地通过命令行来使用它,其语法为:“rma [-s HOST] [-p PORT] [-a PASSWORD] [-d DB] [-m pattern-to-match] [-l number-of-keys-to-scan] [-b BEHAVIOUR] [-t comma-separated-list-of-data-types-to-scan]”

RMA的优势:

  • 能够实时运行。
  • 使用扫描命令来遍历数据库,因此它对性能的影响是有限的,但分析的准确度较高。
  • 有很好的支持文档,很容易找到使用示例。
  • 支持自定义和筛选功能,包括只分析特定的数据类型,或只是考虑与特定模式相匹配的键值。
  • 能提供不同级别的详细信息,包括:命名空间、键值或全局值。
  • 相对其他工具,它具有一项特殊的功能:可以显示数据结构的开销(即,Redis系统用来存储与键值空间相关信息的内存数量,例如列表数据结构中的指针数量)。

RMA的劣势:

  • 不支持概率采样。对于大型数据库来说,其线性扫描数据库的方式可能会非常缓慢。为了提高性能,我们可以在返回了一定数量的键值后,选择中止扫描。
  • 输出中带有太多的细节。虽然对专家有用,但它也可能给新手带来混淆。

2.Redis Sampler 

Redis Sampler是一款非常强大的工具,可以让我们深入了解Redis实例的内存使用情况。它是由Redis背后的开发人员antirez(https://github.com/antirez)所维护。我们能从该工具中看到他对Redis的深入了解。该工具不常被更新,当然也鲜有问题报告被爆出。 

Redis Sampler对数据库执行的是概率扫描,并能报告以下的信息:

  • 键值在各种数据类型之间的百分比分布(基于键值的数量,而不是对象的大小)。
  • 字符串类型的***键,基于strlen,以及它们所消耗的内存百分比。
  • 对于所有其他数据类型,它计算出***键、并显示到两个单独的列表中:一个是基于对象的大小;另一个是基于对象的项数。
  • 对于每种数据类型,它还能显示“2的幂分布”。这对于我们了解数据类型的大小分布是非常有用的。其输出能够详细地说明给定类型键值的百分比区间,即:> 2^x和 <= 2^x+1。

Redis Sampler的安装和使用:

由于是一个单独的Ruby脚本,因此它要求Ruby已完成了安装。同时,您还需要安装好“rubygems”和“redis gems”。它的用法非常简单,只需执行命令“./redis-sampler.rb”便可。

Redis Sampler的优势:

  • 非常简单易用,没有查找和需要理解的选项。
  • 即使是新手也很容易读懂它的输出。同时,它也能提供足够多的信息,供技术专家对Redis的实例进行详细分析。其显示区域的布局比较清晰,且能够进行过滤。
  • 适用于Redis的所有版本。
  • 由于没有用到任何诸如DEBUG OGJECT的特权命令,因此它可以被应用到包括亚马逊 ElastiCache在内的任何系统之上。
  • 它使用特定数据类型长度的命令来识别数据大小,因此其报告并不受序列化的影响。
  • 适用于实时数据。虽然该工具建议是在环回接口上运行,但其实它也能支持对远程系统的采样。

Redis Sampler的劣势:

  • 如果其采样频率的设置高于数据库的本身基数(cardinality),那么它将仍然使用随机键值(RANDOMKEYS)而不是扫描(SCAN)模式。
  • 没有现成可用的bundle或Docker的图像。您必须手动安装其相应的依赖项(好在只有两个依赖关系项)。
  • 由于数据结构有着不同的存储开销,因此报告中的数据大小并不能完全匹配RAM上所占用的空间。
  • 如果您的Redis实例需要身份验证的话,它无法做到开箱即用(out-of-the-box)。您需要修改脚本以适应密码的需求。最简单形式是:redis = Redis.new(:host => ARGV[0], :port => ARGV[1].to_i, :db => ARGV[2].to_i) and change it to: redis = Redis.new(:host => ARGV[0], :port => ARGV[1].to_i, :db => ARGV[2].to_i, :password => "add-your-password-here")

3.RDB Tools 

RDB Tools对于任何一位苛刻的Redis管理员来说都是非常实用的工具套件。我们能够想到的几乎所有用例,它都有着对应的工具。在此,我们仅关注它的内存分析工具。虽然不像RMA或Redis Sampler那样全面,但是RDB Tools提供了下面三个方面的重要信息: 

(1) 列出了所有(序列化)数值大于B字节【B由用户来指定】的键。 

(2) ***的N个键【N由用户指定】。 

(3) 特定键的大小:这是从数据库中实时读取的。

该套件在GitHub上有许多活跃的贡献者,因此它能经常保持更新。在互联网上我们也能找到RDB Tools的相关文档。其维护者是Sripathi Krishnan(https://github.com/sripathikrishnan?tab=repositories)。众所周知,他多年来为Redis社区提供了许多工具。

RDB Tools的安装和使用:

RDB Tools需要在系统上事先安装好Python和PIP,两者一般都被预安装在了主流操作的系统之上。安装完毕后,您可以执行一条“pip install rdbtools python-lz”的命令来安装RDB工具。

其用法非常简单:

  • 获取前200个***键:rdb -c memory /var/redis/6379/dump.rdb –largest 200 -f memory.csv
  • 获取所有大于128字节的键值:rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
  • 获取键值的大小:redis-memory-for-key -s localhost -p 6379 -a mypassword person:1

RDB Tools的优势:

  • 输出的CSV文件,可被其他开源工具所使用,从而方便地实现数据可视化,同时也能导入RDBMS中予以分析。
  • 具有良好的支持文档。
  • 支持自定义和筛选选项,您可以籍此获得更加有用的报告。

RDB Tools的劣势:

  • 不能分析实时数据,而且您必须获取RDB dump文件。因此,它报告的是序列化内存的使用率,并非精确地显示RAM上所占用的内存。
  • 它并不支持任何内置的分组,因此无法找到***的命名空间。

4.Redis-Audit 

Redis-Audit是一种概率工具,您可以用它来快速地获知内存的使用情况。它能够输出各种有用的键组信息,包括:总体内存消耗、组内***TTL、上一次平均访问时间、组中过期键的百分比等。如果您想找到应用中那些大量消耗内存的键值组,那么它就是您的***工具。

Redis-Audit安装和使用: 

您必须事先安装了Ruby和Bundle(https://bundler.io/)。安装完成之后,您可以将Redis-Audit的存储库(https://github.com/snmaynard/redis-audit.git)克隆到某个文件夹,或是下载zip工具(https://github.com/snmaynard/redis-audit/archive/master.zip)并解压缩到那里。在该文件夹中,您可以运行“bundle install”来完成安装。

它的用法非常简单,你可以直接在命令行中输入“execute”

redis-audit.rb hostname [port] [password] [dbnum] [sample_size]

Redis-Audit的优势:

  • 允许您为键值空间和前缀分组定义自己的正则表达式(regex)。
  • 适用于Redis的所有版本。 

  • 如果样本的大小大于键的实际数量,它将遍历所有的键。在另一方面,此操作会使用*键,而不使用扫描来阻止其他的操作。

Redis-Audit的劣势:

  • 由于使用了“DEBUG OBJECT”命令(这在ElastiCache中是不可用的),因此它所报告的序列化大小与RAM上的实际占用会有所不同。
  • 由于不是表格的形式,因此其输出不容易被快速地解析到。

5.Redis Toolkit  

Redis Toolkit是一种极简易的监视方案。它可以被用于分析两类关键指标:***率和内存消耗。虽然该项目会定期通过更新来修复bug,但并没有社区去对它所提供的工具予以支持。

Redis Toolkit的安装和使用:

 您的系统上必须先安装好Docker。然后,克隆它的GitHub存储库(https://github.com/alexdicianu/redis_toolkit.git)或下载并解压到某个文件夹中。在该文件夹里,您可以通过执行“./redis-toolkit install.”来完成简单的安装。

以下是一些纯命令行的简单操作:

  • 开始监视***率:./redis-toolkit monitor
  • 报告***率:./redis-toolkit report -name NAME -type hitrate
  • 停止监视***率:./redis-toolkit stop
  • 在本地系统上创建dump文件:./redis-toolkit dump
  • 报告内存使用情况:./redis-toolkit report -type memory -name NAME

Redis Toolkit的优势:

  • 能够通过易用的界面,向您提供准确的信息。
  • 能够将前缀分组为任何适合您的级别(因此,如果选取a:b:1和a:c:1,那么它既可以算作a:*、也可以单独计算)。
  • 适用于Redis的所有版本,同时不需要访问诸如DEBUG OBJECT之类的特权命令。
  • 具有良好的支持文档。

Redis Toolkit的劣势:

  • 由于它工作在序列化的dump模式,因此无法进行实时的内容分析。同样,它报告的内存使用量也并非完全等同于RAM的实际消耗量。
  • 在Redis Toolkit运行时,计算机会创建一个dump文件。如果您访问的是一个Redis的远程实例,那么就可能需要一段时间才能完成。
  • 使用MONITOR命令来监视***率,以捕获在服务器上运行的所有命令。那么在生产环境中,这样可能会降低性能,并带来安全风险。
  • 由于它是通过|GET| / (|GET| + |SET|)来计算***率的,因此如果某个数值经常发生变化,就算没有错过任何真实的缓存,那么它的***率也会有所降低。

6.Harvest

 这是一款概率采样的工具,它可以被用于根据键的数量来识别十个***的命名空间和前缀。由于是一款较新的工具,它在GitHub上的关注度并不高。然而,如果您是一名想找到自己的实例中哪些应用数据有拥塞的Redis新手,那么Harvest对您来说就非常最容易上手。

Harvest的安装和使用:

您可以通过链接:https://hub.docker.com/r/31z4/harvest/来下载它的Docker镜像。一旦镜像准备就绪,您就可以在CLI中使用“docker run --link redis:redis -it --rm 31z4/harvest redis://redis-URL”的命令来运行该工具。

Harvest的优势:

  • •适用于实时数据。
  • •使用“memory usage”命令来获取内存信息。因此它既能够提供精确的数量信息(而不是序列化大小),又不需要访问DEBUG OBJECT的命令。
  • •您的命名空间不需要用冒号来区分开来。Harvest能够识别常见的前缀,而不是依靠正则表达式来进行命名空间的识别。

Harvest的劣势:

  • 很难适用于任何其他类型的用例。
  • 该工具仅适用于Redis v4.0及以上版本。
  • 其支持文档非常少。

免费工具的局限性

虽然我们在此列举的工具对于调试Redis实例的内存问题非常实用,但是您也应该知道这些免费工具的一些局限性。

付费工具一般总能提供某些数据的可视化功能,但是我们在此所列举的工具却无法实现开箱即用。它们顶多给您输出CSV文件,以供其他开源软件进一步实现可视化,当然许多工具甚至连此类输出都不具备。这就给Redis的新手用户带来了“陡峭”的学习曲线。因此,如果您需要经常进行内存分析的话,那么您***选用能够提供良好的可视化功能的付费工具。

另一个局限性是它们存储历史信息的能力。和那些*nix的设计理念一样,这些工具只专注于某个方面并能其做到***,但是它们鲜少涉猎整个监控领域。它们既不能提供一段时间的内存消耗曲线图,也无法分析实时的数据。

选择的底线

虽然单个工具的确无法满足您的所有需求,但是它们可以作为您的“武器库”中的常备“武器”,来配合诸如:ScaleGrid的Redis hosting(https://scalegrid.io/redis/products.html)之类具有监控能力的DBaaS服务,来联合使用。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32--HAL库定时器学习记录(易懂)--持续学习

一、什么是定时器 定时器就是计数器&#xff0c;通过计数完成一系列功能。 二、定时器的分类 定时器分为基本定时器、通用定时器、高级定时器。级别不同&#xff0c;功能不同。级别越高&#xff0c;功能越强。 三、定时器&#xff08;计数器&#xff09;三个重要寄存器 预分…

机器学习_15_贝叶斯算法

文章目录 1 贝叶斯定理相关公式2 朴素贝叶斯算法2.1 朴素贝叶斯算法推导2.2 朴素贝叶斯算法流程 3 高斯朴素贝叶斯4 伯努利朴素贝叶斯5 多项式朴素贝叶斯6 贝叶斯网络6.1 最简单的一个贝叶斯网络6.2 全连接贝叶斯网络6.3 “正常”贝叶斯网络6.4 实际贝叶斯网络&#xff1a;判断…

中国城乡建设统计年鉴,pdf、xls格式,时间覆盖2002-2022年

基本信息&#xff1a; 数据名称: 中国城乡&#xff08;市&#xff09;建设统计年鉴 数据格式: pdf、xls不定 数据时间: 2002-2022年 数据几何类型: 文本 数据坐标系: —— 数据来源&#xff1a;住房和城乡建设部 2005年之后数据中有《中国城市建设统计年鉴》、《中…

基于JAVA的宠物管理系统

技术架构&#xff1a; Servlet JSP MySQL 有需要该项目的小伙伴可以私信我你的Q。 功能介绍&#xff1a; 系统主要分为前台和后台两大模块 前台主要由用户体验使用: 用户登录 注册 查找商品 商品类别等功能导航&#xff1b; 后台…

一些你可能用到的函数和头文件

不知道大家对于bool&#xff08;布尔&#xff09;函数记忆如何&#xff0c;今天我们就讲一下 bool 函数。 在一些要判断一个数是否具有某种性质的时候可以使用 bool 函数&#xff0c;在一些情况下可以结合使用if else 或 switch 以及 while 等函数来做到判断性质。 1. bool 函…

雨云免费SSL证书介绍

SSL证书是网站保护用户数据安全和保护网站自身免受黑客攻击的有效工具。雨云免费SSL证书是一种免费的SSL证书服务。 什么是SSL证书&#xff1f; SSL&#xff08;Secure Sockets Layer&#xff09;证书是一个数字证书&#xff0c;可以证明网站身份的真实性&#xff0c;并保护在…

【Java程序设计】【C00246】基于Springboot的留守儿童爱心网站(有论文)

基于Springboot的留守儿童爱心网站&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的留守儿童爱心网站 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;系统首页的主要功能展…

【C++】使用g++指令控制【翻译】各个过程

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》…

item_get_video-获取视频详情(bili.item_get_video)

B站&#xff08;Bilibili&#xff09;的item_get_video API用于获取视频的详细信息。通过调用该API&#xff0c;您将能够获得视频的基本信息、元数据、播放链接等。这使得开发者可以轻松地将B站视频集成到自己的应用程序或网站中&#xff0c;为用户提供更丰富的内容和更好的体验…

神经网络 | 基于多种神经网络模型的轴承故障检测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要源自《第二届全国技能大赛智能制造工程技术项目比赛试题&#xff08;样题&#xff09; 模块 E 工业大数据与人工智能应用》&#xff0c;基于给出的已知轴承状态的振动信号样本&#xff0c;对数据进行分析&#xff0c;建…

极速上手:使用Jmeter轻松实现N种参数化

参数化的方式&#xff1a; 一、使用用户自定义变量 一种方式&#xff1a;直接在测试计划中添加用户自定义变量 另外一种方式&#xff1a;配置元件——用户自定义变量 示例&#xff1a;用户自定义变量&#xff0c;登录手机号码 在接口请求的时候&#xff0c;进行引用 请求之后&…

Avalonia学习(二十二)-数据库操作端

开始项目式的例子&#xff0c;但是不方便给大家贴代码了。 内容很多&#xff0c;只能演示一个界面&#xff0c;例子上传。 我不擅长界面美化和配色&#xff0c;有兴趣的可以继续完善&#xff0c;当前实现mysql。 最近所有样例的地址&#xff1a; GitHub - jinyuttt/Avalonia…

本地缓存Ehcache的应用实践 | 京东云技术团队

java本地缓存包含多个框架&#xff0c;其中常用的包括&#xff1a;Caffeine、Guava Cache和Ehcache&#xff0c; 其中Caffeine号称本地缓存之王&#xff0c;也是近年来被众多程序员推崇的缓存框架&#xff0c;同时也是SpringBoot内置的本地缓存实现。但是除了Caffeine之外&…

1893_文本化以及协议的思考

全部学习汇总&#xff1a; g_unix: UNIX系统学习笔记 (gitee.com) 004_文本化以及协议 关于这一点描述的确是很有感触&#xff0c;python等脚本语言中的列表、字典等设计的确是在做数据处理的时候很好的帮手。如果类似的处理需要在C的环境中处理&#xff0c;显然是要麻烦得多。…

React 面试题

1、组件通信的方式 父组件传子组件&#xff1a;通过props 的方式 子组件传父组件&#xff1a;父组件将自身函数传入&#xff0c;子组件调用该函数&#xff0c;父组件在函数中拿到子组件传递的数据 兄弟组件通信&#xff1a;找到共同的父节点&#xff0c;用父节点转发进行通信 …

如何利用 AI 做乘法,制作一款龙年贺卡小程序

2022 年底 AIGC 的出现&#xff0c;让 2023 年成为通用人工智能元年。 这是最好的时代&#xff0c;利用 AI&#xff0c;之前仅能存在幻想中的事物落地成现实。 只需要寥寥几句话&#xff0c;就可以描绘一张斑斓的画&#xff0c;真实而又丰富的画。 目前 AI 生图的大模型不多…

IDEA插件ChatGPT - Easycode安装使用

IDEA插件ChatGPT - Easycode简介 ChatGPT - Easycode 是一个由 OpenAI 开发的 IntelliJ IDEA 插件,它可以利用 ChatGPT 的强大语言生成能力,帮助开发人员提高编码效率。 主要功能: 代码生成:可以根据自然语言描述生成代码,支持多种编程语言,包括 Java、Python、JavaSc…

春节宅家必备!仅需26元/月,与好友共战《幻兽帕鲁》!

开放世界游戏《幻兽帕鲁》1 月 19 日推出抢先体验版之后&#xff0c;热度连日居高不下&#xff0c;其发售仅 6 天销量就突破了 800 万份&#xff0c;在线人数更是突破了 200 万大关。 因为游戏自身优化问题&#xff0c;不少玩家也遭遇了卡顿、闪退、延迟高等问题。针对此&#…

PPT、PDF全文档翻译相关产品调研笔记

主要找一下是否有比较给力的全文档翻译 文章目录 1 百度翻译2 小牛翻译3 腾讯交互翻译4 DeepL5 languagex6 云译科技7 快翻:qtrans8 simplifyai9 officetranslator10 火山引擎翻译-无文档翻译1 百度翻译 地址: https://fanyi.baidu.com/ 配套的比较完善,对于不同行业也有区…

UPCX项目被选为2024多哈世界游泳锦标赛和世联世界杯的官方赞助商

2024年2月2日晚&#xff0c;世界泳联官方针对英国队夺得 2024 年多哈世界游泳锦标赛第一枚奖表示庆祝&#xff01; 据悉&#xff0c;UPCX 项目已被选为 2024 年多哈世界游泳锦标赛和世界泳联游泳世界杯巡回赛的官方区块链支付赞助商。 在两项国际重大赛事期间&#xff0c;运动…