redis性能测试 memtier-benchmark

news2024/12/20 21:05:48

memtier_benchmark 是一种高吞吐量的性能基准测试工具,主要用于 Redis Memcached。它是 Redis 开发团队开发的,旨在生成各种流量模式,以便测试和优化这些数据库的性能。以下是 memtier_benchmark 的一些关键特点:

  1. 多协议支持:memtier_benchmark 支持 Redis 和 Memcached(包括二进制和文本协议),可以用于比较不同场景下的性能表现。
  2. 多线程与多客户端:该工具能够启动多个工作线程,每个线程可以驱动配置数量的客户端,从而更好地利用硬件资源,生成高负载流量。
  3. 可定制的测试选项:用户可以通过选项来控制 GET 和 SET 操作的比例、键的使用模式(随机或顺序)、键的过期时间范围等,以模拟不同的访问模式。
  4. 报告生成:memtier_benchmark 能够在多次测试迭代后自动生成最佳、最差和平均结果的报告,帮助用户深入了解系统性能。
  5. 开源:该工具的源代码在 GitHub 上开源,用户可以自由下载和使用。

1. 工具安装

1.1 ubuntu镜像源安装memtier-benchmark

镜像源安装:

sudo apt install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install memtier-benchmark
1.2 源码安装

Centos/RHEL系统没有找到镜像源,可以使用源码方式进行安装。

CentOS/Red Hat Linux 7 or newer

安装依赖:

$ sudo yum install autoconf automake make gcc-c++ \
    pcre-devel zlib-devel libmemcached-devel libevent-devel openssl-devel
Ubuntu/Debian

安装依赖:

$ sudo apt-get install build-essential autoconf automake libpcre3-dev \
    libevent-dev pkg-config zlib1g-dev libssl-dev
macOS

安装依赖:

$ brew install autoconf automake libtool libevent pkg-config openssl@3.0

当运行./configure时,如果找不到libssl,可能需要调整PKG_CONFIG_PATH环境变量:

PKG_CONFIG_PATH=`brew --prefix openssl@3.0`/lib/pkgconfig ./configure

编译安装

使用git下载源码,git clone https://github.com/RedisLabs/memtier_benchmark.git, 使用如下命令编译安装:

$ autoreconf -ivf
$ ./configure
$ make
$ sudo make install

2. memtier_benchmark 参数详解

下面是 memtier_benchmark 参数的详细说明:

连接和通用选项
  • -h, --host=ADDR: 服务器地址(默认值:localhost)。
  • -s, --server=ADDR: 同 --host
  • -p, --port=PORT: 服务器端口(默认值:6379)。
  • -S, --unix-socket=SOCKET: UNIX 域套接字名称(默认值:无)。
  • -4, --ipv4: 强制使用 IPv4 地址解析。
  • -6, --ipv6: 强制使用 IPv6 地址解析。
  • -P, --protocol=PROTOCOL: 使用的协议(默认值:redis)。其他支持的协议有 resp2resp3memcache_textmemcache_binary。使用 resp2resp3 时,将通过 HELLO 命令设置 Redis 协议版本。
  • -a, --authenticate=CREDENTIALS: 使用指定的凭据进行身份验证。对于 memcache_text 和 Redis <= 5.x,使用简单密码。对于 memcache_binary 或 Redis 6.x 及更新版本,支持 ACL 用户,格式为 <USER>:<PASSWORD>
  • --tls: 启用 SSL/TLS 传输安全。
  • --cert=FILE: 使用指定的客户端证书进行 TLS。
  • --key=FILE: 使用指定的私钥进行 TLS。
  • --cacert=FILE: 使用指定的 CA 证书包进行 TLS。
  • --tls-skip-verify: 跳过服务器证书验证。
  • --tls-protocols: 指定使用的 TLS 协议版本,逗号分隔。使用组合 TLSv1TLSv1.1TLSv1.2TLSv1.3
  • --sni=STRING: 添加 SNI 头。
  • -x, --run-count=NUMBER: 执行的完整测试迭代次数。
  • -D, --debug: 打印调试输出。
  • --client-stats=FILE: 生成每个客户端的统计文件。
  • -o, --out-file=FILE: 输出文件名称(默认:stdout)。
  • --json-out-file=FILE: JSON 输出文件名称,如果未设置,则不会输出 JSON。
  • --hdr-file-prefix=FILE: HDR 延迟直方图输出文件的前缀,如果未设置,则不会保存延迟直方图文件。
  • --show-config: 在运行前打印详细配置。
  • --hide-histogram: 不打印详细的延迟直方图。
  • --print-percentiles: 指定在结果表中打印的百分位数信息(默认打印百分位数:50、99、99.9)。
  • --cluster-mode: 在集群模式下运行客户端。
  • -h, --help: 显示帮助信息。
  • -v, --version: 显示版本信息。
测试选项
  • -n, --requests=NUMBER: 每个客户端的总请求数(默认值:10000)。使用 allkeys 在整个键范围内运行。
  • --rate-limiting=NUMBER: 每个连接每秒最大请求数(默认无限制)。如果使用 --rate-limiting 且输入非常大的速率但无法满足,memtier 将尽可能每秒执行尽可能多的请求。
  • -c, --clients=NUMBER: 每个线程的客户端数(默认值:50)。
  • -t, --threads=NUMBER: 线程数(默认值:4)。
  • --test-time=SECS: 测试运行的秒数。
  • --ratio=RATIO: Set:Get 比例(默认值:1:10)。
  • --pipeline=NUMBER: 并发流水线请求数(默认值:1)。
  • --reconnect-interval=NUM: 执行多少请求后重新连接。
  • --multi-key-get=NUM: 启用多键获取命令,最多获取 NUM 键(默认值:0)。
  • --select-db=DB: 选择数据库编号(测试 Redis 服务器时)。
  • --distinct-client-seed: 为每个客户端使用不同的随机种子。
  • --randomize: 基于时间戳的随机种子(默认值为固定值)。
任意命令
  • --command=COMMAND: 指定要发送的命令,用引号括起来。指定的每个命令都根据其比例和键模式选项运行。例如:--command="set __key__ 5" --command-ratio=2 --command-key-pattern=G。使用生成的键或对象时,输入:
    • __key__: 使用键选项生成的键。
    • __data__: 使用对象选项生成的数据。
  • --command-ratio: 命令按序列发送的次数(默认值:1)。
  • --command-key-pattern: 命令的键模式(默认值:R)。支持以下模式:
    • G:高斯分布。
    • R:均匀随机。
    • S:顺序。
    • P:并行(每个客户端都有键范围的子集)。
对象选项
  • -d --data-size=SIZE: 对象数据大小(字节),默认值为 32
  • --data-offset=OFFSET: 实际值大小为 data-size + data-offset。将使用 SETRANGE / GETRANGE命令(默认值:0)。
  • -R --random-data: 表示数据应随机化。
  • --data-size-range=RANGE: 使用指定范围内随机大小的项目(最小-最大)。
  • --data-size-list=LIST: 从权重列表中使用大小(size1:weight1,..sizeN:weightN)。
  • --data-size-pattern=R|S: 与 data-size-range 一起使用时,当设置为 R 时,将使用定义的数据大小的随机大小;当设置为 S 时,定义的数据大小将在键范围内均匀分布,参见 --key-maximum(默认值 R)。
  • --expiry-range=RANGE: 使用指定范围内的随机过期值。
导入数据选项
  • --data-import=FILE: 从文件读取对象数据。
  • --data-verify: 启用测试完成后的数据验证。
  • --verify-only: 仅执行 --data-verify,不执行其他测试。
  • --generate-keys: 为导入的对象生成键。
  • --no-expiry: 忽略导入数据中的过期信息。
键选项
  • --key-prefix=PREFIX: 键的前缀(默认值:"memtier-")。
  • --key-minimum=NUMBER: 键 ID 最小值(默认值:0)。
  • --key-maximum=NUMBER: 键 ID 最大值(默认值:10000000)。
  • --key-pattern=PATTERN: Set:Get 模式(默认值:R:R)。支持以下模式:
    • G:高斯分布。
    • R:均匀随机。
    • S:顺序。
    • P:并行(每个客户端都有键范围的子集)。
  • --key-stddev: 高斯分布中使用的标准偏差(默认值为键范围 / 6)。
  • --key-median: 高斯分布中使用的中值点(默认值为键范围的中心)。
等待选项
  • --wait-ratio=RATIO: Set:Wait 比例(默认无 WAIT 命令 - 1:0)。
  • --num-slaves=RANGE: 在指定范围内等待随机数量的从属服务器。
  • --wait-timeout=RANGE: 在指定范围内等待随机数量的毫秒数(正态分布,中心在范围中

3. 运行测试

3.1 基本的 Redis 性能测试

下面是一个基本的 memtier_benchmark 测试命令示例,该命令将在本地 Redis 实例上执行。4线程,每个线程50个客户端,每个请求256字节数据,按照1:1的setget操作比例进行测试,同时redis开启了密码认证,加上-a password,password为密码。

memtier_benchmark -s 127.0.0.1 -p 6379 -a password -t 2 -c 50 -d 256 --ratio=1:1
Writing results to stdout
[RUN #1] Preparing benchmark client...
[RUN #1] Launching threads now...
[RUN #1 100%,   4 secs]  0 threads:     1000000 ops,  208253 (avg:  204726) ops/sec, 34.16MB/sec (avg: 33.58MB/sec),  0.48 (avg:  0.49) msec latency

2         Threads
50        Connections per thread
10000     Requests per client


ALL STATS
============================================================================================================================
Type         Ops/sec     Hits/sec   Misses/sec    Avg. Latency     p50 Latency     p99 Latency   p99.9 Latency       KB/sec
----------------------------------------------------------------------------------------------------------------------------
Sets       102789.78          ---          ---         0.48844         0.44700         1.11900         1.76700     30504.23
Gets       102789.78        82.23    102707.54         0.48814         0.44700         1.12700         1.79900      4024.84
Waits           0.00          ---          ---             ---             ---             ---             ---          ---
Totals     205579.55        82.23    102707.54         0.48829         0.44700         1.12700         1.78300     34529.07


Request Latency Distribution
Type     <= msec         Percent
------------------------------------------------------------------------
SET       0.047        0.000
SET       0.351        5.000
...

执行命令后,memtier_benchmark 会输出详细的性能测试结果,包括每秒请求数(Requests per second),延迟(Latency),和其他统计数据。

3.2 使用 memtier_benchmark 进行高级性能测试

在进行 Redis 性能测试时,除了基础的测试参数,您还可以利用一些高级功能来生成更复杂的测试场景。这些功能包括伪随机数据、高斯访问模式和范围操作。以下是这些功能的详细说明和示例。

伪随机数据

根据已知大小范围生成随机数据。这是通过将新的 --data-size-pattern 选项设置为值 'S'(顺序)并使用 --data-size-range 选项指定其范围。以下示例将生成一个基准键空间,其值均匀分布在 4 到 204 字节之间:

memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 <additional parameters>

在上面的例子中,我们使用了 --random-data 开关来生成随机数据,同时使用 --key-minimum 和 --key-maximum 开关来控制键名 ID 的范围,生成了总共 200 个键。第一个键 memtier-200 将存储 4 字节的数据,接下来的键将依次增加,每个键的数据大小比前一个增加 1 字节,直到最后一个键 memtier-400,它将存储 204 字节的数据。

高斯访问模式

memtier_benchmark基准测试工具能够使用高斯分布(也叫做正态分布)来访问测试数据。在进行此更改之前,您可以为基准测试的访问模式指定均匀随机或顺序分布。但为了更好地模拟现实生活中的用例,这个新选项允许您将 memtier_benchmark 键访问模式符合熟悉的高斯分布的钟形曲线。使用此选项时,您还可以控制和设置分布所遵循的标准差和中位数。例如,使用以下参数调用该工具:

memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 --key-pattern=G:G --key-stddev=10 --key-median=300 <additional parameters>

上述命令将导致大多数读/写访问集中在第100个键(memtier-300)上。

范围操作

新功能支持使用 Redis 命令 SETRANGEGETRANGE 代替 SET GET 的功能,这使您能够构建使用更大数据大小但网络流量显著减少的基准测试。

例如,您可以设置键值为 1MB,但只读写最后一个字节,使用以下参数进行调用测试:

memtier-benchmark --data-offset=1048575 --data-size=1 <additional parameters>

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

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

相关文章

云原生周刊:Kubernetes v1.32 正式发布

开源项目推荐 Helmper Helmper 简化了将 Helm Charts导入OCI&#xff08;开放容器倡议&#xff09;注册表的过程&#xff0c;并支持可选的漏洞修复功能。它确保您的 Helm Charts不仅安全存储&#xff0c;还能及时应用最新的安全修复。该工具完全兼容 OCI 标准&#xff0c;能够…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

如何在繁忙的生活中找到自己的节奏?

目录 一、理解生活节奏的重要性 二、分析当前生活节奏 1. 时间分配 2. 心理状态 3. 身体状况 4. 生活习惯 1. 快慢适中 2. 张弛结合 3. 与目标相符 三、掌握调整生活节奏的策略 1. 设定优先级 2. 合理规划时间 3. 学会拒绝与取舍 4. 保持健康的生活方式 5. 留出…

CORDIC 算法实现 _FPGA

注&#xff1a;本文为 “CORDIC 算法” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 Cordic 算法的原理介绍 乐富道 2014-01-28 23:05 Cordic 算法知道正弦和余弦值&#xff0c;求反正切&#xff0c;即角度。 采用用不断的旋转求出对应的正弦余弦值&…

鸿蒙学习笔记:用户登录界面

文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素&#xff1a;一张图片增添视觉感&#xff0c;两个分别用于账号与密码的文本输入框&#…

着色器 (三)

今天&#xff0c;是我们介绍opengl着色器最后一章&#xff0c;着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说&#xff0c;着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序&#xff0c;因为它们之…

leetcode:3285. 找到稳定山的下标(python3解法)

难度&#xff1a;简单 有 n 座山排成一列&#xff0c;每座山都有一个高度。给你一个整数数组 height &#xff0c;其中 height[i] 表示第 i 座山的高度&#xff0c;再给你一个整数 threshold 。 对于下标不为 0 的一座山&#xff0c;如果它左侧相邻的山的高度 严格大于 thresho…

深度学习之超分辨率算法——SRGAN

更新版本 实现了生成对抗网络在超分辨率上的使用 更新了损失函数&#xff0c;增加先验函数 SRresnet实现 import torch import torchvision from torch import nnclass ConvBlock(nn.Module):def __init__(self, kernel_size3, stride1, n_inchannels64):super(ConvBlock…

集成方案 | Docusign + 金蝶云,实现合同签署流程自动化!

本文将详细介绍 Docusign 与金蝶云的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 在当今商业环境中&#xff0c;流程的无缝整合与数据的实时性对于企业的成功至关重要。金蝶云&…

数据结构----链表头插中插尾插

一、链表的基本概念 链表是一种线性数据结构&#xff0c;它由一系列节点组成。每个节点包含两个主要部分&#xff1a; 数据域&#xff1a;用于存储数据元素&#xff0c;可以是任何类型的数据&#xff0c;如整数、字符、结构体等。指针域&#xff1a;用于存储下一个节点&#…

Service Discovery in Microservices 客户端/服务端服务发现

原文链接 Client Side Service Discovery in Microservices - GeeksforGeeks 原文链接 Server Side Service Discovery in Microservices - GeeksforGeeks 目录 服务发现介绍 Server-Side 服务发现 实例&#xff1a; Client-Side 服务发现 实例&#xff1a; 服务发现介绍…

Git连接远程仓库(超详细)

目录 一、Gitee 远程仓库连接 1. HTTPS 方式 2. SSH公钥方式 &#xff08;1&#xff09;账户公钥 &#xff08;2&#xff09;仓库公钥 仓库的 SSH Key 和账户 SSH Key 的区别&#xff1f;​ 二、GitHub远程仓库连接 1. HTTPS方式 2.SSH公钥方式 本文将介绍如何通过 H…

系列4:基于Centos-8.6 Kubernetes多网卡节点Calico选择网卡配置

每日禅语 不动心”是一个人修养和定力的体现&#xff0c;若一个人心无定力&#xff0c;就会被外界环境左右&#xff0c;随外界的境遇而动摇。佛家认为&#xff0c;心是一切的基础&#xff0c;一个人如果想要真正入定&#xff0c;必须先从修心开始。修心即是净心&#xff0c;心灵…

Docker:Dockerfile(补充四)

这里写目录标题 1. Dockerfile常见指令1.1 DockerFile例子 2. 一些其他命令 1. Dockerfile常见指令 简单的dockerFile文件 FROM openjdk:17LABEL authorleifengyangCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]# 使…

98. 验证二叉搜索树(java)

题目描述&#xff1a; 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 …

微软 Phi-4:小型模型的推理能力大突破

在人工智能领域&#xff0c;语言模型的发展日新月异。微软作为行业的重要参与者&#xff0c;一直致力于推动语言模型技术的进步。近日&#xff0c;微软推出了最新的小型语言模型 Phi-4&#xff0c;这款模型以其卓越的复杂推理能力和在数学领域的出色表现&#xff0c;引起了广泛…

libaom 源码分析:熵编码模块介绍

AV1 熵编码原理介绍 关于AV1 熵编码原理介绍可以参考:AV1 编码标准熵编码技术概述libaom 熵编码相关源码介绍 函数流程图 核心函数介绍 av1_pack_bitstream 函数:该函数负责将编码后的数据打包成符合 AV1 标准的比特流格式;包括写入序列头 OBU 的函数 av1_write_obu_header…

JAVA基于百度AI人脸识别签到考勤系统(开题报告+作品+论文)

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

go 中使用redis 基础用法

1、安装redis 参考链接&#xff1a;https://www.codeleading.com/article/98554130215/ 1.1 查看是否有redis yum 源 yum install redis没有可用的软件包&#xff0c;执行1.2 1.2下载fedora的epel仓库 yum install epel-release --下载fedora的epel仓库1.3启动redis s…

postman添加cookie

点击cookies 输入域名&#xff0c;添加该域名下的cookies 发送改域名下的请求&#xff0c;cookie会自动追加上