1. redis-benchmark的使用

2. memtier_benchmark的使用

3. python脚本对redis进行测试


1. redis-benchmark的使用

    通常我们开发完一个系统之后,如何验证这个系统的好坏呢,这就需要做性能测试,Redis也不例外。幸运的是,Redis源码中已经提供了测试工具redis-benchmark,当我们从源码中编译完成Redis之后,就可以使用redis-benchmark对Redis进行性能测试。

    redis-benchmard的使用语法如下:

redis-benchmark [option] [option value]

  可选参数如下所示: 

序号

选项

描述

默认值

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 连接并等待。

  例如:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q

  测试结果:

SET: 63291.14 requests per second
LPUSH: 58479.53 requests per second

    以上实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。

2. memtier_benchmark的使用

    memtier_benchmark是Redis Labs推出的一款命令行工具。它可以根据需求生成多种结构的数据对数据库进行压力测试,以了解目标数据库的性能极限。其部分功能特性如下。

  • 支持Redis和Memcached数据库测试。
  • 支持多线程、多客户端测试。
  • 可设置测试中的读写比例(SET: GET Ratio)。
  • 可自定义测试中键的结构。
  • 支持设置随机过期时间。

   使用教程如下:

(1)安装依赖

    memtier_benchmark的安装依赖以下依赖包:Git、libevent 2.0.10或更高版本、libpcre 8.x、autoconf、automake、GNU make、GCC C++ compiler。

yum install git
yum install autoconf automake make gcc-c++
yum install pcre-devel zlib-devel libmemcached-devel

# 如您系统中的libevent库不符合要求,下载并安装libevent-2.0.21
wget https:///downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xfz libevent-2.0.21-stable.tar.gz
pushd libevent-2.0.21-stable
./configure
make
sudo make install
popd

# 设置PKG_CONFIG_PATH使configure能够发现前置步骤安装的库。
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}

(2)下载并编译memtier_benchmark    

git clone https:///RedisLabs/memtier_benchmark.git
cd memtier_benchmark
autoreconf -ivf
./configure
make
make install

(3)测试方法

   使用示例:

./memtier_benchmark -s  -p 6379 -a XXX -c 20 -d 32 --threads=10 
--ratio=1:1 --test-time=1800 --select-db=10

   具体参数如下:

选项

说明

-s

Redis数据库的连接地址

-a

Redis数据库的密码

-c

测试中模拟连接的客户端数量

-d

测试使用的对象数据的大小

--threads

测试中使用的线程数

--ratio

测试命令的读写比率(SET:GET Ratio)

--test-time

测试时长(单位:秒)

--select-db

测试使用的DB数量

更多详细的参数,可以运行:./memtier_benchmard --help 查询。 

3. python脚本对redis进行测试

  除了使用redis-benchmard和memtier_benchmark,我们也可以使用python脚本对Redis进行性能测试。

  首先需要安装python版本的Redis:

pip install redis

  接着就可以编码连接Redis,并且进行测试:

(1)简单连接

import redis

# 创建Redis对象进行连接
# 参数:decode_responses是否解码返回值
r = redis.Redis(host = 'localhost', port = 6379, password = '123456', decode_responses = True)

# 终端下的命令在代码中都是函数
r.set('name', 'xiaoming')

print(r.get('name'))

(2)连接池

  多个redis对象使用同一个连接池进行连接,避免了多次连接、断开等操作的系统开销

import redis

# 创建连接池,减少了多次的连接、断开的开销
pool = redis.ConnectionPool(password = '123456', decode_responses = True)

# 创建Redis对象
r = redis.Redis(connection_pool = pool)

print(r.get('name'))

(3)使用管道

  • 管道可以记录多个操作,然后一次将操作发送至数据库,避免了多次向服务器发送少量的数据
  • 多个操作可以依次进行保存,然后发送,也可以进行连贯操作
import redis

# 创建连接池,减少了多次的连接、断开的开销
pool = redis.ConnectionPool(password = '123456', decode_responses = True)

# 创建Redis对象
r = redis.Redis(connection_pool = pool)

# 创建管道
pipe = r.pipeline()

# 保存记录操作
#pipe.set('name', 'dahua')
#pipe.set('age', 20)
# 执行操作(发送到服务器),一次可以执行多个操作,可以避免多次的想服武器发送数据
#pipe.execute()

# 也可以进行连贯操作
pipe.set('name', 'haha').set('age', 10).execute()

print(r.get('name'))