草庐IT

工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控

全栈工程师修炼指南 2023-03-28 原文

[ 点击 ? 关注「 WeiyiGeek」公众号 ]

设为「⭐️ 星标」每天带你玩转网络安全运维、应用开发、物联网IOT学习!

希望各位看友【关注、点赞、评论、收藏、投币】,助力每一个梦想。

---

本章目录


首发地址:https://mp.weixin.qq.com/s/f3wOWgoacGzWb-7BJrWzZg

温馨提示:唯一极客技术博客文章在线浏览【极客全栈修炼】小程序上线了,涉及网络安全、系统运维、应用开发、物联网实战、全栈文章,希望和大家一起学习进步,欢迎浏览交流!(希望大家多多提提意见)


0x00 快速介绍

什么是RedisInsight?

RedisInsight 是一个直观而高效的 Redis GUI (可视化工具),它提供了设计、开发和优化 Redis 应用程序的功能,查询、分析您的 Redis 数据并与之交互,简化您的 Redis 应用程序开发 。(必备)
RedisInsight 现在采用了基于流行的 Electron 框架的全新技术堆栈, 它可以跨平台运行,支持 Linux、Windows 和 MacOS。

为啥用RedisInsight?
描述:RedisInsight 提供直观的 Redis 管理 GUI,有助于优化您在应用程序中对 Redis 的使用,相比于其他可视化工具,其实现的功能更强大、执行效率更改,通用性更好等特定,

下面列举出 RedisInsight 的亮点功能:

  • 唯一支持 Redis Cluster 的 GUI 工具;
  • 可以基于 Browser 的界面来进行搜索键、查看和编辑数据;
  • 支持基于 SSL/TLS 的连接,同时还可以在界面上进行内存分析;
  • 支持连接 Redis Open Source、 Redis Stack 、 Redis Enterprise Software 、 Redis Enterprise Cloud 和 Amazon ElastiCache等系统;
  • 支持自定义扩展插件实现更多功能。

RedisInsight 支持的功能:

  • 直观且高效的 GUI: 允许您与数据库交互、监控和管理您的数据。
  • CRUD支持更广泛:允许对列表、哈希、字符串、集、排序集以及流Stream 数据库结构支持 CRUD 。
  • 多行查询编辑器:进行构建查询、探索结果、优化和快速迭代,支持 JSON 、 Search 、 Graph 、 Streams 、 Time Series 和 RedisGears 。
  • 内存分析:通过密钥模式、过期密钥和高级搜索来分析内存使用情况,以识别内存问题, 利用建议来减少内存使用量。
  • 命令调试: 识别顶部键、键模式和命令,按集群所有节点的客户端 IP 地址、密钥或命令进行过滤,有效地调试 Lua 脚本,并利用 Redis CLI 提供语法突出显示和自动完成功能,并采用集成帮助来提供直观的即时帮助。
  • 指标监控:通过界面深入了解实时性能指标、检查慢速命令并管理 Redis 配置。
  • 发布/订阅:支持 Redis 发布/订阅,支持订阅频道并将消息发布到频道
  • 数据浏览:浏览、筛选、可视化您的键值 Redis 数据结构,并查看不同格式(包括 JSON、十六进制、ASCII 等)的键值
  • 平台兼容:适用于苹果操作系统(包括 M1)、Windows和 Linux

补充:官方推荐的其他Redis数据库相关工具查看 [ https://redis.io/docs/tools/ ],当然你也可以可以选择客户端桌面管理工具(例如,AnotherRedisDesktopManage [ https://github.com/qishibo/AnotherRedisDesktopManager ] )


0x01 安装部署

描述:redis-insight 与现在大多数软件一样,有多种安装方式其中用得比较多的就是二进制、源码编译以及容器化部署的方式。

二进制方式

描述:我们需要在Redis官方进行下载 redis-insight 二进制包然后进行安装部署,有可能国内下载比较缓慢,此时我已将其打包下来,方便大家下载。

Redis GUI redis-insight 工具 下载:

环境依赖

Requirement Ubuntu MacOS Windows
Operating System Ubuntu 18.04 LTS or later MacOS 10.13 or later Windows 10
Memory (RAM) 8GB 8GB 8GB
Processor 64 bit 64 bit 32 bit or 64 bit

安装环境

$ lsb_release  -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal

$ lscpu  | grep "CPU(s)"
CPU(s):                          4
On-line CPU(s) list:             0-3

$ lsmem  | grep "Total online memory"
Total online memory:       8G

安装流程

步骤 01.官网下载 RedisInsight 上传到 /usr/local/bin 目录 并打开 shell 终端赋予其下载权限。

cd /usr/local/bin
mv redisinsight-linux64-1.13.0 redisinsight-linux64
chmod +x redisinsight-linux64

步骤 02.设置Redisinsight启动所需的环境变量:

mkdir ~/.redisinsight
echo "export RIHOST=0.0.0.0" > ~/.bash_profile
echo "export RIPORT=8081" >> ~/.bash_profile
echo "export RIHOMEDIR=~/.redisinsight" >> ~/.bash_profile
echo "export RILOGDIR=~/.redisinsight" >> ~/.bash_profile
source ~/.bash_profile

温馨提示:如果使用了REDISINSIGHT_HOST, REDISINSIGHT_PORT, REDISINSIGHT_HOME_DIR and LOG_DIR等环境变量便会出现如下提示。

WARNING 2022-09-20 05:56:33,461 redisinsight_startup REDISINSIGHT_HOST, REDISINSIGHT_PORT, REDISINSIGHT_HOME_DIR and LOG_DIR environment variables will be deprecated in the version v1.9.
Please use RIHOST, RIPORT, RIHOMEDIR and RILOGDIR environment variables for setting host, port, db directory and log directory respectively.

步骤 03.启动Redisinsight并后台运行它

#  后台运行
nohup /usr/local/bin/redisinsight-linux64 > ~/.redisinsight/console.log 2>&1 &

步骤 04.查看 redisinsight 进程运行情况

root@weiyigeek:~# ps aux | grep "redisinsight"
root        6592  8.0  0.0   3220  2212 pts/0    S    13:59   0:00 /usr/local/bin/redisinsight-linux64
root        6593  8.9  0.9 602080 74616 pts/0    Sl   13:59   0:00 /usr/local/bin/redisinsight-linux64
root        6602  0.0  0.0   6432   724 pts/0    S+   13:59   0:00 grep redisinsight
root@weiyigeek:~# netstat -ano | grep ":8081"
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      off (0.00/0/0)

步骤 05.访问部署的redisinsight站点 http://10.20.172.201:8081/ 进行下一步配置,继续配置你的 Redis 数据库,此处我已经搭建好了一个redis数据库如需搭建请参考此篇文章【https://blog.weiyigeek.top/2022/4-24-653.html】,点击连接到 Redis 数据库进入到下一步。

步骤 06.进行配置Redis数据库信息,此处我是单节点进行演示,输入主机、端口、名称、以及redis密码。

至此安装配置完成,使用将在后续实践!


容器化方式

描述:当下大多数企业的应用都是在容器环境中运行,所以redis官方也提供了相应容器镜像以及在kubernetes中部署的资源清单,下述将演示在 Kubernetes 上安装 RedisInsight,安装高可用的K8S可以参照此篇文章 【 https://blog.weiyigeek.top/2022/6-7-664.html

镜像主页:https://hub.docker.com/r/redislabs/redisinsight/tags
镜像名称:docker pull redislabs/redisinsight:1.13.0

部署方式

步骤 01.在 k8s 集群中创建一个 RedisInsight 部署和服务 YAML 文件资源清单,注意此处我使用了动态存储卷,如果有需要的部署nfs动态存储卷可参考此篇文章( https://blog.weiyigeek.top/2022/6-7-664.html

tee redisinsight-1.13.0.yaml <<'EOF'
# RedisInsight service with name 'redisinsight-service'
apiVersion: v1
kind: Service
metadata:
  name: redisinsight-service
  namespace: dev
spec:
  type: LoadBalancer
  ports:
    - port: 8001
      targetPort: 8001
  selector:
    app: redisinsight
---
# RedisInsight persistant storage 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redisinsight-pv-claim
  namespace: dev
  labels:
    app: redisinsight
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: managed-nfs-storage
---
# RedisInsight deployment with name 'redisinsight'
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redisinsight   # deployment name
  namespace: dev
  labels:
    app: redisinsight  # deployment label
spec:
  replicas: 1          # a single replica pod
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: redisinsight # which pods is the deployment managing, as defined by the pod template
  template:             # pod template
    metadata:
      labels:
        app: redisinsight # label for pod/s
    spec:
      volumes:
        - name: db
          persistentVolumeClaim:
            claimName: redisinsight-pv-claim
      initContainers:
        - name: init
          image: busybox
          command:
            - /bin/sh
            - '-c'
            - |
                            chown -R 1001 /db
          resources: {}
          volumeMounts:
            - name: db
              mountPath: /db
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      containers:
        - name:  redisinsight                  # Container name (DNS_LABEL, unique)
          image: redislabs/redisinsight:1.13.0 # Hub Image
          imagePullPolicy: IfNotPresent        # Pull Policy
          env: 
          - name: RIHOST
            value: "0.0.0.0"
          - name: RIPORT
            value: "8001"
          volumeMounts:
          - name: db 
            mountPath: /db
          ports:
          - containerPort: 8001        # exposed container port and protocol
            protocol: TCP
          livenessProbe:
            httpGet:
              path : /healthcheck/     # exposed RI endpoint for healthcheck
              port: 8001               # exposed container port
            initialDelaySeconds: 5      # number of seconds to wait after the container starts to perform liveness probe
            periodSeconds: 5            # period in seconds after which liveness probe is performed
            failureThreshold: 1         # number of liveness probe failures after which container restarts
EOF

步骤02.在k8s集群中部署 redisinsight v1.13.0 应用、服务以及持久化卷,查看其部署状态。

$ kubectl create namespace dev
namespace/dev created

$ kubectl apply -f redisinsight-1.13.0.yaml
service/redisinsight-service created
persistentvolumeclaim/redisinsight-pv-claim created
deployment.apps/redisinsight created

$ kubectl get pod,svc -n dev -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP              NODE       NOMINATED NODE   READINESS GATES
pod/redisinsight-55d44b5bb-xzggg   1/1     Running   0          3m22s   10.66.182.217   weiyigeek-226   <none>           <none>

NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE     SELECTOR
service/redisinsight-service   LoadBalancer   10.108.198.8   <pending>     80:31793/TCP   3m22s   app=redisinsight

$ curl -I 10.66.182.217:8001
HTTP/1.1 200 OK
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private

# 端口转发
$ kubectl -n dev port-forward deployment/redisinsight --address 0.0.0.0 30081:8001
Forwarding from 0.0.0.0:30081 -> 8001
Handling connection for 30081
Handling connection for 30081

步骤 03.成功应用并完成部署和服务,我们可通过浏览器访问 192.168.1.107:31793 便可看到如下图所示界面。

至此,在k8s集群中部署完毕


0x02 实践应用

1.配置连接的Redis数据库

描述:在使用任何工具处理数据库之前,必须先添加数据库(Add Database),以便 RedisInsight 可以连接到该数据库,添加独立的 Redis 数据库 这是只有一台 Redis 服务器的 Redis 数据库最简单的设置,当然也支持独立 Redis 集群 Redis Sentinel 或者 具有TLS认证的Redis数据库。
注意:目前 RedisInsight 支持 Redis 版本 4 及更高版本。

2.查看Redis数据库实时统计信息

描述:点击配置好的Redis数据目标,即可看到如下overview页面

3.操作Redis数据库中的数据

描述: 可以通过使用 Browser(图形) 或者 cli(命令行)进行Redis数据库的CURD,如下图所示

4.操作Redis数据库中的流Streams数据

描述: 可以通过使用 Streams 选项进行 Redis 流操作。

5.性能内存、慢查询分析

描述:RedisInsight 提供了强大的分析功能,支持内存使用分析、分析器(在Redis中执行的命令过程摘要分析)以及慢日志查询。

6.可视化配置redis数据库

描述:在Database选项卡中我们可以直接配置Redis数据库,包括其网络配置、通用配置以及快照、配置等等。

当然对应devops来说使用最多的还是CURD以及性能分析以及优化,此工具还是非常方便的,如需解更多其它功能需的朋友,可参考 redisinsight 用户使用文档:https://docs.redis.com/latest/ri/using-redisinsight/


0x03 入坑出坑

问题1.运行 RedisInsight-v2-linux-x86_64 时出现不存在libatk-1.0.so.0/libatk-bridge-2.0.so.0/libcups.so.2/libgtk-3.so.0等错误

  • 错误信息
root@weiyigeek:/usr/local/bin# wget https://download.redisinsight.redis.com/latest/RedisInsight-v2-linux-x86_64.AppImage
root@weiyigeek:/usr/local/bin# mv RedisInsight-v2-linux-x86_64.AppImage RedisInsight
root@weiyigeek:/usr/local/bin# chmod +x RedisInsight
root@weiyigeek:/usr/local/bin# ./RedisInsight
/tmp/.mount_RedisIuCY68M/redisinsight: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
/tmp/.mount_RedisIbwUuBs/redisinsight: error while loading shared libraries: libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory
/tmp/.mount_RedisIb3qNiD/redisinsight: error while loading shared libraries: libcups.so.2: cannot open shared object file: No such file or directory
/tmp/.mount_RedisI9GZsHC/redisinsight: error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory
  • 解决办法:由于我的测试系统是Ubuntu的则使用apt命令安装错误提示中的依赖包。
apt install libatk1.0-dev
apt install libatk-bridge2.0-dev
apt install libcups2-dev
apt install libgtk-3-dev

问题2.运行 RedisInsight-v2-linux-x86_64 时出现 root without --no-sandbox is not supported 错误提示:

错误信息:[0920/133850.852943:FATAL:electron_main_delegate.cc(292)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
解决办法:在低权限用户中执行./RedisInsight启动RedisInsight服务即可。


0x0n 参考来源

官网地址:https://redis.com/redis-enterprise/redis-insight/
项目源码:https://github.com/RedisInsight/RedisInsight
项目文档:https://docs.redis.com/latest/ri
下载地址:https://redis.com/redis-enterprise/redis-insight/#insight-form

原文地址: https://blog.weiyigeek.top/2022/9-20-686.html

本文至此完毕,更多技术文章,尽情期待下一章节!


WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

欢迎各位志同道合的朋友一起学习交流【点击加入交流群】,如文章有误请在下方留下您宝贵的经验知识!

作者主页: 【 https://weiyigeek.top
博客地址: 【 https://blog.weiyigeek.top 】

专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!。

  • echo "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

  • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

  • fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")

  • console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

  • System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")

  • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;

更多网络安全、系统运维、应用开发、物联网实践、网络工程、全栈文章,尽在 https://blog.weiyigeek.top 之中,谢谢各位看又支持!

有关工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐