十一、redis压测与监控优化

本文介绍如何使用LoadRunner进行Redis压力测试,包括设置Java Vuser协议、配置密码、编写测试脚本及压测场景设计。同时,探讨Redis监控优化方法,如慢查询日志设置与查看,提升Redis性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、利用LoadRunner进行redis压测

1、打开LoadRunner,选择Java Vuser协议

2、用eclipse打开RedisTest.java文件,同时需要commons-pool2-2.4.2以及jedis-2.9.0这两个包(是lr压测redis的一个类)--附件已经添加了RedisTest.java文件、commons-pool2-2.4.2以及jedis-2.9.0这两个包

代码如下:

package lr.com.redis;

import java.util.UUID;

import redis.clients.jedis.Jedis;

public class RedisTest {

public static void main(String[] args) throws Throwable {

  Jedis  jedis = new Jedis("192.168.116.162");           /*建立redis的连接*/   

  jedis.auth("123");   

  String id = UUID.randomUUID().toString();

      jedis.set(id,"test"+System.currentTimeMillis());                     /*设置set一个值,在这里是设置id*/

      System.out.println("set " + id );

      String result1= jedis.get(id);                                                /*get一个值,在这里是get id的值*/

      System.out.println(result1 );

     jedis.del(id);                                                                         /*删除一个值,在这个是删除id的值*/

}

}

3、redis设置密码(可以先查看redis是否在系统中提供服务,可以通过netstat -ntlp查看redis端口以及ps -ef|grep redis查看redis进程)

 查看redis配置:config get *

 设置密码:config set requirepass +密码

 设置完毕后,需要ctrl+c退出redis后,以密码的形式重新登录redis(./redis-cli -a 123)

 

4、复制redistest.java中的代码到lr中,协议为Java Vuser,将附件中的lr_redis.txt中的代码复制到lr

/* LoadRunner Java script. (Build: _build_number_)

 *

 * Script Description:

 *                     

 */

import lrapi.lr;

import java.util.UUID;

import redis.clients.jedis.Jedis;

public class Actions

{

        Jedis jedis;  

public int init() throws Throwable {                     

  jedis = new Jedis("192.168.116.162");      建立连接,这里需要写上需要连接的ip地址

       jedis.auth("123");                                    redis配置的登陆密码

   return 0;

}

public int action() throws Throwable {

       String id = UUID.randomUUID().toString();       

  lr.start_transaction("insert");

       jedis.set(id,"test"+System.currentTimeMillis());    set操作

  lr.end_transaction("insert", lr.AUTO);          

  lr.start_transaction("get");

       String result1= jedis.get(id);     get操作

       if(result1!=null){

   lr.end_transaction("get", lr.PASS);    判断是否get到了set的值

       }else{              

    lr.end_transaction("get", lr.FAIL);

          }      

    lr.start_transaction("del");

       jedis.del(id);                              del操作

 lr.end_transaction("del", lr.AUTO);

return 0;

}

public int end() throws Throwable {

return 0;

}

}

5、lr中装入所需要的jar

 6、jar包加入之后,运行查看有无问题,通过所列的事务反馈则可以看出脚本运行是否成功

7、运行LRcontroller工具,设计压测场景进行压测

二、redis监控优化(附件中查看redis_slowlog慢查询)

如果redis监控或者压测中没有达到理想的水准,可以对redis进行优化,优化其配置来弥补

1、redis监控

redis监控利用慢查询进行监控,利用开启慢查询日志来查找出redis处理比较慢的信息,提供给开发进行优化处理

slowlog是什么

redis的slowlog是redis用于记录记录慢查询执行时间的日志系统。由于slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性能。Slowlog是Redis从2.2.12版本引入的一条命令。

2 redisslowlog慢查询日志设置

参考 http://redis.readthedocs.org/en/latest/server/slowlog.html
slowlog有两种设置方式:

2.1 redis.conf设置(需要找到redis.conf配置文件)

在redis.conf中有关于slowlog的设置:

slowlog-log-slower-than 10000

其中slowlog-log-slower-than表示slowlog的划定界限,只有query执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slowlog进行记录。slowlog-log-slower-than设置的单位是微妙,默认是10000微秒,也就是10ms

slowlog-max-len 128

slowlog-max-len表示慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列

 

2.2 使用config方式动态设置slowlog

如下,可以通过config方式动态设置slowlog

- 查看当前slowlog-log-slower-than设置

    127.0.0.1:6379> CONFIG GET slowlog-log-slower-than

    1) "slowlog-log-slower-than"

    2) "10000"

 - 设置slowlog-log-slower-than为100ms

    127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 100000

    OK

 - 设置slowlog-max-len为1000

    127.0.0.1:6379> CONFIG SET slowlog-max-len 1000

    OK

3 slowlog 查看

3.1 查看slowlog总条数

127.0.0.1:6379> SLOWLOG LEN
(integer) 4

3.2 查看slowlog

127.0.0.1:6379> SLOWLOG GET

1) 1) (integer) 25

   2) (integer) 1440057769

   3) (integer) 6

   4) 1) "SLOWLOG"

      2) "LEN"

2) 1) (integer) 24

   2) (integer) 1440057756

   3) (integer) 36

   4) 1) "CONFIG"

      2) "GET"

      3) "slowlog-log-slower-than"

3) 1) (integer) 23

   2) (integer) 1440057752

   3) (integer) 11

   4) 1) "CONFIG"

      2) "SET"

      3) "slowlog-log-slower-than"

      4) "1"

4) 1) (integer) 22

   2) (integer) 1440057493

   3) (integer) 27

   4) 1) "CONFIG"

      2) "GET"

      3) "slowlog-log-slower-than"

5) 1) (integer) 21

   2) (integer) 1440057133

   3) (integer) 7

   4) 1) "monitor"

如果要获取指定的条数可以使用SLOWLOG GET N命令

127.0.0.1:6379> SLOWLOG GET 1

1) 1) (integer) 26            // slowlog唯一编号id

   2) (integer) 1440057815    // 查询的时间戳

   3) (integer) 47            // 查询的耗时(微妙),如表示本条命令查询耗时47微秒

   4) 1) "SLOWLOG"            // 查询命令,完整命令为 SLOWLOG GET,slowlog最多保存前面的31个key和128字符

      2) "GET"

slowlog源码解读

参考:http://blog.sina.com.cn/s/blog_48c95a190101gebh.html 
写的很详细

<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 连接并等待。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值