一、利用LoadRunner进行redis压测

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

java redis 压测 redis 压测脚本_java redis 压测

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进程)

java redis 压测 redis 压测脚本_压测_02

查看redis配置:config get *

java redis 压测 redis 压测脚本_redis_03

设置密码:config set requirepass +密码

java redis 压测 redis 压测脚本_性能测试_04

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

java redis 压测 redis 压测脚本_压测_05

 

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包

java redis 压测 redis 压测脚本_性能测试_06

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

java redis 压测 redis 压测脚本_redis_07

7、运行LR的controller工具,设计压测场景进行压测

java redis 压测 redis 压测脚本_性能测试_08

二、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队列

java redis 压测 redis 压测脚本_压测_09

 

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"

java redis 压测 redis 压测脚本_redis_10

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

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

    OK

java redis 压测 redis 压测脚本_性能测试_11

- 设置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源码解读