一、利用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、运行LR的controller工具,设计压测场景进行压测
二、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源码解读