redis-计算每个大key

本文介绍了如何使用rdbtools工具对Redis RDB文件进行内存分析、键值提取,并通过实例对比了rdb工具与rdb_bigkeys在效率上的差异。重点展示了通过命令行操作获取关键信息和优化内存占用的方法。

一、安装工具

pip install rdbtools

rdb工具地址:github地址​​​​​​​

二、copy份线上 dump.rdb

三、开始分析

rdb -c memory -l 20 redis6379_database.rdb

四、参数解释

usage: usage: rdb [options] /path/to/dump.rdb

Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb

positional arguments:
  dump_file             RDB Dump file to process

optional arguments:
  -h, --help            show this help message and exit
  -c CMD, --command CMD
                        Command to execute. Valid commands are json(转存成json), diff(比较rdb文件),
                        justkeys(只打印key), justkeyvals(只打印value), memory(计算近似内存) and protocol(使用protocol命令将RDB文件转换为redis协议流)
                         
  -f FILE, --file FILE   # 结果输出到的文件,-f后面接文件名
  -n DBS, --db DBS       # 指定的数据库,不指定就是所有数据库
  -k KEYS, --key KEYS    # 指定key解析,可以是正则表达式,如abc*
  -o NOT_KEYS, --not-key NOT_KEYS
                         # 不解析哪些key
  -t TYPES, --type TYPES
                         # 指定解析的类型(string,hash, set, sortedset, list),不指定则所有

  -b BYTES, --bytes BYTES
                        # 只输出内存大于多少的key
  -l LARGEST, --largest LARGEST
                        # 只输出内存排名前几的key
  -e {raw,print,utf8,base64}, --escape {raw,print,utf8,base64}
                        # 解析成不同的编码
  -x, --no-expire       # 使用command protocol参数,从所有键中删除到期的key 
  -a N, --amend-expire N
                        # 使用command protocol参数,将N秒添加到key的到期时间
csv 字段详解
database:数据库编号
type:数据类型
key:键
size_in_bytes:使用的内存:包括键,值和任何其他开销
encoding:RDB编码类型
num_elements:key中的value的个数
len_largest_element:key中的value的长度
expiry:过期值

五、实践

1.查看所有key

 rdb -c justkeys a.rdb -f a.txt

2.计算占用内存最大的5个key(注意这种的比较是在内存中,所以要保证你的内存大于rdb的大小)

rdb -c memory -l 5 a.rdb -f a.csv

3.查看内存占用大于等于多大的key并写入文件(为了解决2所产生的问题,这样可以生成结果之后再排序)

# 把内存占用大于等于102400000bytes的key写入到csv中,因为rdb是单线程的,利用不到多核,亲测了下,16GB的文件大概需要分析一小时
rdb -c memory -b 102400000 a.rdb -f a.csv

大佬文章:Redis RDB 分析工具 rdbtools 说明 - jyzhou - 博客园

go工具:github地址​​​​​​​

go工具(rdb-bigkeys)安装和使用:安装方法

4.简单测试

# 测试一:
# set-a的内容如下
127.0.0.1:6379> smembers set-a
1) "a3"
2) "a1"
3) "a2"

#1.rdb工具的结果
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,set,set-a,284,hashtable,3,2,

#2.rdb_bigkeys工具的结果
database,type,key,size_in_bytes,num_elements,largest_element,largest_element_size_in_bytes,expire_datetime
0,set,set-a,6,3,1,2,


# 结论一:
# 从目前的结果来看。go计算的占用结果似乎更准确一些


# 测试二:
# dump2.rdb的大小为923M
date&&./rdb_bigkeys --bytes 1024 --file bigkeys_6379.csv --sep 0  --threads 2 ../dump2.rdb&&date
2023年 03月 01日 星期三 10:54:57 CST
2023年 03月 01日 星期三 10:55:14 CST

date&&rdb -c memory -b 1024 -f a.csv ../dump2.rdb&&date
2023年 03月 01日 星期三 10:56:50 CST
2023年 03月 01日 星期三 11:01:48 CST

# 结论二:
解析一个923M的rdb文件,rdb_bigkeys用时为17s,rdb用时为4分58秒,最终解析的key的大小差距并不是太大,几十到几百bytes,所以rdb并不会有太大的误差,但是rdb_bigkeys速度更快一些

<think>首先,用户的问题是:“我想使用redis-benchmark工具对Redis进行压力测试 请问如何使用 redis-benchmark 对 Redis 进行压力测试”。我需要基于系统指令和提供的引用内容来回答。 系统指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用,但引用仅供参考,不是用户真正需求;我需要基于用户的问题和上一次的交互。 用户上一次的问题:用户没有提供上一次的问题历史,所以我只能基于当前问题。 引用内容总结: - [^1]: redis-benchmark 是 Redis 自带的性能测试工具,用于模拟不同客户端请求场景,评估性能。 - [^2]: 示例命令:redis-benchmark -h 192.168.5.140 -p 7001 -a admin -t get -d 16 --threads 4 -c 100 -n 1000000 -r 1000000 -q - [^3]: 测试后输出吞吐量等指标;注意事项:确保服务器能承受负载,避免生产环境影响。 - [^4]: 使用 -t 参数选择测试用例,如 -t set,lpush;选择键范围大小- [^5]: 列出redis-benchmark的参数选项,如-h, -p, -c, -n, -d, -k, -r, -P, -q, --csv, -l, -t, -I。 回答结构: - 结构清晰:逐步解释如何使用redis-benchmark。 - 使用中文。 - 在引用的内容末尾添加引用标识。 - 生成相关问题。 步骤: 1. **介绍redis-benchmark**:简要说明工具是什么和用途。 2. **基本用法**:解释如何运行基本命令。 3. **参数详解**:详细说明关键参数,基于引用。 4. **示例命令**:提供一些常见场景的示例。 5. **注意事项**:提醒用户测试时注意点。 6. **生成相关问题**:在最后添加相关问题。 确保行内数学表达式:用户问题中没有数学表达式,所以可能不需要使用。但如果有任何数学内容,比如性能指标计算,才使用$...$。目前看,引用中没有数学表达式,所以可能省略。 独立公式:同样,没有明显的公式需要。 生成相关问题:在回答结束后,添加“相关问题”部分。 引用标识:当引用特定内容时,在末尾加[^数字]。例如,提到参数列表时引用[^5]。 完整回答结构: - 开头:直接回答用户问题。 - 主体: - 步骤1: 安装和基本命令。 - 步骤2: 参数解释。 - 步骤3: 示例测试。 - 步骤4: 结果解读。 - 结尾:注意事项。 - 相关问题列表。 基于引用: - 引用[^1]:介绍工具。 - 引用[^2]:示例命令。 - 引用[^3]:注意事项。 - 引用[^4]:选择测试用例。 - 引用[^5]:参数选项。 回答内容: 1. **介绍**:redis-benchmark是Redis自带的性能测试工具,用于模拟客户端请求,评估Redis性能[^1]。 2. **基本用法**:运行命令格式:`redis-benchmark [options]`。例如,默认测试:`redis-benchmark`。 3. **参数详解**: - `-h`: 指定主机名,默认127.0.0.1。 - `-p`: 指定端口,默认6379。 - `-a`: 密码认证(如果Redis需要)。 - `-c`: 并发连接数,默认50。 - `-n`: 总请求数,默认10000。 - `-d`: 数据大小(字节),用于SET/GET,默认2。 - `-t`: 选择测试命令,如`-t set,get`。 - `--threads`: 使用多线程(在Redis 6+支持)。 - `-q`: 安静模式,只显示每秒请求数。 - 其他:`-r` 使用随机键,`-P` 管道传输等[^5]。 4. **示例**: - 测试GET命令:`redis-benchmark -h localhost -p 6379 -t get -c 100 -n 100000 -q` - 高级示例:`redis-benchmark -h 192.168.5.140 -p 7001 -a admin -t get -d 16 --threads 4 -c 100 -n 1000000 -r 1000000 -q`[^2] 5. **结果解读**:测试后输出吞吐量(requests per second),表示每秒处理的请求数[^3]。 6. **注意事项**: - 测试前确保Redis服务器运行正常。 - 避免在生产环境测试以免影响服务。 - 调整参数模拟实际场景[^3]。 相关问题: 1. 如何解读redis-benchmark的输出结果? 2. redis-benchmark测试中常见的错误如何解决? 3. 除了redis-benchmark,还有哪些工具可以用于Redis性能测试?</think>### 如何使用 redis-benchmark 对 Redis 进行压力测试 redis-benchmark 是 Redis 自带的性能测试工具,用于模拟不同客户端请求场景,帮助评估 Redis 在特定硬件、配置和负载下的性能[^1]。以下我将逐步解释如何使用它进行压力测试,确保操作清晰可靠。 #### 步骤 1: 安装与基本命令 - **前提条件**:确保 Redis 已安装并运行。redis-benchmark 通常位于 Redis 安装目录的 `src/` 文件夹下(Linux/Unix 系统)或通过 Redis 命令行直接调用。 - **基本语法**: ```bash redis-benchmark [选项] ``` - **默认测试**: 运行 `redis-benchmark` 不加参数时,会使用默认配置测试常见命令(如 SET、GET、LPUSH),并发连接数为 50,总请求数为 10000[^5]。 示例输出: ``` SET: 42662.11 requests per second GET: 42408.82 requests per second ... ``` #### 步骤 2: 关键参数详解 redis-benchmark 提供多个参数来定制测试场景。以下是常用选项(基于引用[^5]补充说明): | 参数 | 描述 | 默认值 | |--------------|----------------------------------------------------------------------|------------| | `-h <host>` | 指定 Redis 服务器主机名 | 127.0.0.1 | | `-p <port>` | 指定 Redis 服务器端口 | 6379 | | `-a <pass>` | 如果 Redis 启用了认证,需提供密码 | 无 | | `-t <cmds>` | 选择测试的命令(逗号分隔),如 `set,get` 或 `lpush` | 所有命令 | | `-c <conn>` | 并发连接数(模拟客户端数量) | 50 | | `-n <reqs>` | 总请求数 | 10000 | | `-d <size>` | SET/GET 操作的数据大小(字节),例如 `-d 1024` 测试 1KB 数据 | 2 | | `-r <keys>` | 使用随机键的范围大小(避免缓存影响),例如 `-r 1000000` | 固定键 | | `--threads` | 使用多线程模式(Redis 6+ 支持),提高测试效率 | 单线程 | | `-q` | 安静模式,只输出吞吐量(每秒请求数) | 关闭 | | `-P <num>` | 管道传输请求数,提升网络效率(例如 `-P 10`) | 1 | | `-l` | 循环模式,永久执行测试(按 Ctrl+C 停止) | 关闭 | #### 步骤 3: 运行示例测试 根据实际场景调整参数。以下是常见用例: - **基础压力测试(GET 命令)**: ```bash redis-benchmark -h localhost -p 6379 -t get -c 100 -n 100000 -q ``` 输出:`GET: 85034.12 requests per second`,表示每秒处理约 8.5 万次 GET 请求[^3]。 - **高级场景(带认证、多线程、数据)**: 引用[^2] 的实战示例: ```bash redis-benchmark -h 192.168.5.140 -p 7001 -a admin -t get -d 16 --threads 4 -c 100 -n 1000000 -r 1000000 -q ``` 解释: - `-a admin`:使用密码认证。 - `-d 16`:测试 16 字节数据。 - `--threads 4`:启用 4 个线程。 - `-c 100 -n 1000000`:100 个并发连接,总请求 100 万次。 - `-r 1000000`:键范围 100 万,模拟随机访问。 - `-q`:只显示吞吐量。 - **自定义命令组合**: ```bash redis-benchmark -t set,lpush -n 50000 -d 128 -q ``` 输出: ``` SET: 35625.89 requests per second LPUSH: 35211.27 requests per second ``` 这有助于比较不同命令的性能[^4]。 #### 步骤 4: 结果解读与优化建议 - **关键指标**: - **吞吐量(requests per second)**:核心输出,值越高表示性能越好。 - **延迟**:可通过工具如 `redis-cli --latency` 补充测试。 测试结束时会汇总所有命令的指标,帮助分析瓶颈[^3]。 - **注意事项**: - **环境安全**:避免在生产环境运行高负载测试,以防影响服务[^3]。 - **参数调整**:根据实际负载模拟场景(如数据大小、并发数),确保测试结果真实可靠。 - **资源监控**:测试时使用 `top` 或 `htop` 监控 Redis 服务器的 CPU/内存使用率。 - **常见问题**:若连接失败,检查防火墙或 Redis 配置(如 `bind` 设置)。 #### 相关问题 1. 如何解读 redis-benchmark 的输出结果中的吞吐量和延迟指标? 2. redis-benchmark 测试中遇到连接超时或认证失败,如何排查? 3. 除了 redis-benchmark,还有哪些工具可以用于 Redis 集群的性能测试? [^1]: 使用 redis-benchmark 进行性能测试的详细指南。redis-benchmark 是 Redis 自带的一款性能测试工具,用于模拟不同的客户端请求场景,帮助开发者评估 Redis 在特定硬件、配置和负载下的性能。无论是新部署的 Redis 实例还是优化后的环境,redis-benchmark 都可以提供基准测试数据,以衡量性能的变化。 [^2]: Redis6【安装使用篇】04:使用redis-benchmark对Redis进行压测。 六、实战压测 1、单实例压测 redis-benchmark -h 192.168.5.140 -p 7001 -a admin -t get -d 16 --threads 4 -c 100 -n 1000000 -r 1000000 -q。 [^3]: Redis性能测试redis-benchmark。测试结束后,redis-benchmark 会输出每个命令的吞吐量(请求每秒)和其他性能指标。这些指标可以帮助你了解 Redis 在特定配置下的性能。 注意事项 确保 Redis 服务器在测试期间能够承受负载。在生产环境中测试时要小心,避免对现有服务造成影响。根据需要调整参数,以模拟更接近你实际使用场景的负载。 [^4]: redis-benchmark 使用。你不必每次都运行 redis-benchmark 默认的所有测试。 使用 -t 参数可以选择你需要运行的测试用例 ./redis-benchmark.exe -t set,lpush -n 100000 -q SET: 42662.11 requests per second LPUSH: 42408.82 requests per second 选择测试键的范围大小。 [^5]: redis-benchmark对redis进行性能测试。redis 性能测试工具可选参数如下所示: 序号 选项 描述 默认值 1 - h 指定服务器主机名 127.0.0.1 2 -p 指定服务器端口 6379 3 -s 指定服务器 socket 4 -c 指定并发连接数 50 5 -n 指定请求数 10000 6 -d 以字节的形式指定 SET/GET 值的数据大小 2 7 -k 1=keep alive 0=reconnect 1 8 -r SET/GET/INCR 使用随机 key, SADD 使用随机值 9 -P 通过管道传输 <numreq> 请求 1 10 -q 强制退出 redis。仅显示 query/sec 值 11 --csv 以 CSV 格式输出 12 -l(L 的小写字母) 生成循环,永久执行测试 13 -t 仅运行以逗号分隔的测试命令列表。 14 -I(i 的写字母) Idle 模式。仅打开 N 个 idle 连接并等待。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值