redis-benchmark 基准测试

2023-11-09

redis-benchmark 基准测试

大家好,我是爱吃鱼的程序员,一个渴望在互联网行业做到C位的程序员。可柔可刚,点赞则柔,白嫖则刚!看完记得给我来个三连哦!欢迎私信!

1. 概述

当我们希望提高性能的使用,往往想到的是异步、缓存这个两种手段。

  • 前者,例如说内存队列(例如说 JDK Queue、Disruptor 等)、分布式队列(例如说 RabbitMQ、RocketMQ、Kafka),更多适合写操作。
  • 后者,例如说内存缓存(例如说 JDK Map、EhCache 等)、分布式缓存(例如说 Redis、Memcached 等),更适合读操作。

不过,本文我们不会去聊上述所有的手段或是框架、中间件,而是聚焦本文的主角 Redis 。
日常中,我们经常能在公司、论坛、技术群里看到如下一段对话:

甲:我们的 MySQL 读取很慢啊,有什么办法解决啊?
乙:上缓存啊,Redis 额。

那么,为什么上 Redis 就一般能解决读的问题呢?为了避免将问题复杂化,我们直接看 Redis 和 MySQL 的性能对比。还是老样子,我们来对比阿里云的 MySQL 性能规格Redis 性能规格

  • 1C 1GB 配置
    • Redis 1C 1GB 主从版,提供 80000 QPS
    • MySQL 1C 1GB 通用型,提供 465 QPS
    • 相差 172 倍左右的性能
  • 16C 128G 配置
    • Redis 16C 128G 集群版(单副本),提供 1280000 QPS
    • MySQL 16C 128G 独享版,提供 48102 QPS
    • 相差 26 倍左右的性能

当然,两者测试的方式,有一定差异,这里仅仅作为一个量级上的对比。

在开始基准测试之前,我们再来看看 Redis 大体的性能规格,从各大云厂商提供的 Redis 云服务。

2. 性能指标

通过我们看各大厂商提供的指标,我们不难发现,主要是 QPS 。

3. 测试工具

Redis 的性能测试工具,目前主流使用的是 redis-benchmark 。为什么这么说呢?

  • 在我们 Google 搜索 “Redis 性能测试”时,清一色的文章选择的工具,清一色的都是 redis-benchmark 。
  • 我翻看了云厂商(腾讯云、UCloud 等),提供的测试方法,都是基于 redis-benchmark 。

当然,也是有其它工具:

考虑到主流,本文使用 redis-benchmark 作为性能测试工具。

4. redis-benchmark

FROM 《Redis 有多快?》
Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。(类似于 Apache ab 程序)。

4.1 测试环境

  • 型号 :ecs.c5.xlarge

艿艿:和我一样抠门(穷)的胖友,可以买竞价类型服务器,使用完后,做成镜像。等下次需要使用的时候,恢复一下。HOHO 。

  • 系统 :CentOS 7.6 64位
  • CPU :4 核
  • 内存 :8 GB
  • 磁盘 :40 GB ESSD 云盘
  • Redis :5.0.5

不想编译安装的朋友,可以看看 《How to Install Latest Redis on CentOS 7》 文章。

4.2 安装工具

因为 redis-benchmark 是 Redis 自带的,所以不需要专门去安装,舒服~。

4.3 使用指南

redis-benchmark 的使用非常简单,只要了解它每个参数的作用,就可以非常方便的执行一次性能测试。我们来一起看看有哪些参数。执行 redis-benchmark -h 命令,返回参数列表:

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests>] [-k <boolean>]
 -h <hostname>      Server hostname (default 127.0.0.1)
 -p <port>          Server port (default 6379)
 -s <socket>        Server socket (overrides host and port)
 -a <password>      Password for Redis Auth
 -c <clients>       Number of parallel connections (default 50)
 -n <requests>      Total number of requests (default 100000)
 -d <size>          Data size of SET/GET value in bytes (default 3)
 --dbnum <db>       SELECT the specified db number (default 0)
 -k <boolean>       1=keep alive 0=reconnect (default 1)
 -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD
  Using this option the benchmark will expand the string __rand_int__
  inside an argument with a 12 digits number in the specified range
  from 0 to keyspacelen-1. The substitution changes every time a command
  is executed. Default tests use this to hit random keys in the
  specified range.
 -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).
 -e                 If server replies with errors, show them on stdout.
                    (no more than 1 error per second is displayed)
 -q                 Quiet. Just show query/sec values
 --csv              Output in CSV format
 -l                 Loop. Run the tests forever
 -t <tests>         Only run the comma separated list of tests. The test
                    names are the same as the ones produced as output.
 -I                 Idle mode. Just open N idle connections and wait.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis-benchmark 基准测试 的相关文章

  • 是否可以使用带有 FUSE 文件系统的 Linux VFS 缓存?

    默认情况下 Linux VFS 缓存似乎不适用于 FUSE 文件系统 例如 read 调用似乎被系统地转发到 FUSE 文件系统 我在 FUSE 特定的远程文件系统上工作 我需要一个非常积极的缓存 我需要实现自己的页面缓存吗 或者是否可以为
  • 连接到 localhost:6379 时出现错误 99。无法分配请求的地址

    设置 我有一个虚拟机 并在虚拟机中运行三个容器 一个 nginx 代理 一个非常简约的 Flask 应用程序和 redis Flask 应在端口 5000 上提供服务 而 redis 应在 6379 上提供服务 这些容器中的每一个都可以作为
  • Redis 写入 .ssh/authorized_keys

    当前设置 2 个主服务器 12 个工作服务器 工作人员通过 ssh copy id 连接到主设备 主设备和工作人员正在主设备上的 redis 队列中写入数据 过去一周我遇到的问题是 Redis 正在将数据写入authorized keys
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • 我的 Redis 自动生成的密钥

    我不知道我的 Redis 版本 4 0 9 到底发生了什么 我正在运行一个应用程序并使用 Redis 来存储我的数据库 但是 然后 Redis 自动创建 3 个新键 Backup1 Backup2 Backup3 并删除我的所有数据 这是我
  • 如何在多个Lua State(多线程)之间传递数据?

    我在中启动Redis连接池redis lua 通过从 C 调用 我得到了redis lua state 此 Lua 状态全局启动一次 仅在其他线程中启动get从中 当有一个 HTTP 请求 工作线程 时 我需要从redis lua stat
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据

随机推荐

  • 网络nan的原因_深度学习网络训练中出现nan的原因分析

    nan Not a Number 错误后果 造成训练准确率的断崖式下跌 两种出现地点 1 在loss函数中出现nan 出现原因 一般是因为tf中的log函数输入了 负数 或 0 值 出现log 0 0的情况 解决方法 使用tf clip b
  • MQTT

    MQTT 菜鸟资料收集 https blog csdn net bangdingshouji article details 52576110 https github com menudoproblema libemqtt https b
  • 使用exceljs导出excel表格

    背景 最近在使用electon写一个桌面程序 需要对数据进行excel导出操作 这里选择使用 exceljs 来完成这个功能 下面是exceljs导出功能的简单实现 功能实现 下载 exceljs yarn add exceljs 引入 e
  • 【Mysql】使用语句插入数据的方法

    mysql中常用的三种插入数据的语句 insert into表示插入数据 数据库会检查主键 如果出现重复会报错 replace into表示插入替换数据 需求表中有PrimaryKey 或者unique索引 如果数据库已经存在数据 则用新数
  • 【故障诊断】基于 KPCA 进行降维、故障检测和故障诊断研究(Matlab代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 主要特点
  • Mongodb的安装部署

    Mongodb的安装部署 一 环境介绍 二 配置mongodb的yum源 三 安装mongodb 三 启动mongodb 1 mongodb启动 2 查看mongodb的状态 3 查看监听端口 四 进入mongodb 五 查看mongodb
  • 有关html,css的实用知识总结(二)

    1 CSS 选择符有哪些 哪些属性可以继承 优先级算法如何计算 1 id 选择器 myid 2 类选择器 myclassname 3 标签选择器 div h1 p 4 相邻选择器 h1 p 5 子选择器 ul lt li 6 后代选择器 l
  • H5 PCM转WAV实时音频直播代码实现细节

    一 前端实现 H5数据采集 web audio的概念和使用详见 接口文档 采集音频数据 var context new AudioContext var audioInput context createMediaStreamSource
  • mysql 强制使用索引和强制不使用索引

    前一段面试时问过这个问题 当时不太懂 今天刚好看到这一块的内容就梳理下 首先说个概念 SQL提示 就是在sql中加入我自己的提示来达到我想要的效果 关于索引有三种sql提示 use index index name 希望mysql参考的索引
  • 手把手教你SQLite在Windows/VS下的安装配置及使用(超详细,不会你怪我)

    目录 一 系统环境 二 下载 三 配置系统环境 四 使用命令win r 输入cmd命令 一 系统环境 我这里用的是 Win10 64Bit VS2015 不同版本相差不大 其版本也可以参考这个安装教程 二 下载 SQLite的官网下载地址
  • 【Ubuntu】格式化U盘

    要格式化 U 盘 你可以使用以下命令来执行 请注意 执行此命令将删除 U 盘上的所有数据 请确保在执行命令之前备份重要文件 在 Linux 上 使用 mkfs 命令格式化 U 盘的步骤如下 打开终端应用程序 确定 U 盘的设备名称 运行以下
  • keyshot分辨率多少合适_keyshot电脑配置浅谈

    以下说明均以官方keyshot7 3 4以上版本为例 我们先看一下keyshot官方给出的安装所需的基本电脑配置需求 官方注释 KeyShot将利用所有可用的CPU内核 因此 更多的CPU核心 线程将产生更快的渲染时间 虽然KeyShot不
  • RabbitMQ初级教程,基础知识

    RabbitMQ学习笔记 RabbitMQ 1 初识MQ 1 1 同步和异步通讯 1 1 1 同步通讯 1 1 2 异步通讯 1 2 技术对比 2 快速入门 2 1 安装RabbitMQ 2 2 RabbitMQ消息模型 2 3 导入Dem
  • linux系统小白入门基础(含常用基本命令)

    Linux概述 简要介绍 Linux内核最初只是由芬兰人李纳斯 托瓦兹 Linus Torvalds 在赫尔辛基大学上学时出于个人爱好而编写的 Linux是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX和UNIX的多用户
  • 上例中便是调用GetSystemMenu函数的

    有如下问题请教各位 1 为什么程序在调用window api或者dll中的输出函数时用的形式是 00401375 FF1514324000 Call dword ptr 004
  • 制作esp32-cam拍照上传,微信小程序照片显示的监控小车

    前期配件准备 ESP32 CAM开发环境配置 程序下载 连接小车 控制台查看图片 微信小程序的开发 1 前期配件准备 小车套件 网上购买即可 较为方便的选择 ESP32 CAM 推荐安信可 外加TTL下载器 方便烧录程序 L298N马达驱动
  • User-agent

    1 手机User Agent 更多关于手机User Agent请 点击 UPPOOL Mozilla 5 0 Linux U Android 8 1 0 zh cn BLA AL00 Build HUAWEIBLA AL00 AppleWe
  • 盘点

    选自Github 机器之心编译 hunkim 盘点了 Github 上 18 个深度学习项目 根据收藏数自动排名 最新的一次 update 在几小时前完成 项目地址 https github com hunkim DeepLearningS
  • sh: 1: pause: not found

    linux下运行c 程序时 希望控制台不会输出后马上消失 在windows系统下 用如下语句 include
  • redis-benchmark 基准测试

    redis benchmark 基准测试 大家好 我是爱吃鱼的程序员 一个渴望在互联网行业做到C位的程序员 可柔可刚 点赞则柔 白嫖则刚 看完记得给我来个三连哦 欢迎私信 1 概述 当我们希望提高性能的使用 往往想到的是异步 缓存这个两种手