Redis安装及性能测试
1. Redis简介
Redis(Remote Dictionary Server)是一款开源的内存数据结构存储系统,广泛应用于缓存、消息队列、实时分析等场景。它支持多种数据结构,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)、位图(bitmaps)、HyperLogLogs和地理空间索引(geospatial indexes)。Redis的特点是其高性能和丰富的数据结构操作。
性能测试使用官方测试工具redis-benchmark,工具模拟N个客户端同时发出M个请求。
2. Redis安装
Redis可以在多种操作系统上安装,包括Linux、macOS和Windows。以下是不同系统的安装步骤:
2.1 在Linux上安装Redis
2.1.1 镜像源安装(以ubuntu为例)
- 更新包列表:
sudo apt-get update
- 安装Redis:
sudo apt-get install redis-server
- 启动Redis服务:
sudo systemctl start redis-server
- 设置Redis在系统启动时自动启动:
sudo systemctl enable redis-server
- 配置redis
# 修改配置文件
sudo vim /etc/redis/redis.conf
...
#远程访问 默认bind 127.0.0.1 ::1
bind 0.0.0.0
...
# 更改端口
port 6379
...
# 设置密码,根据需要是否开启
# requirepass foobared
...
配置修改后重启redis生效。
sudo systemctl restart redis-server
2.1.2 源码编译安装
# 下载redis-6.0.9客户端。
$ wget http://download.redis.io/releases/redis-6.0.9.tar.gz
# 解压客户端压缩包。
$ tar xzf redis-6.0.9.tar.gz
# 进入redis-6.0.9的src目录下。
$ cd redis-6.0.9/src
# 编译安装
$ sudo make && sudo make install
备注:
CentOS7编译安装redis6.0.9需要将gcc版本升级到5.3及以上,默认gcc版本为4.8.5。
2.2 在macOS上安装Redis
- 使用Homebrew安装:
brew update
brew install redis
- 启动Redis服务:
brew services start redis
2.3 在Windows上安装Redis
-
下载Redis:从Redis Windows下载页面下载最新的稳定版本。
-
解压缩并安装:解压缩下载的文件并运行
redis-server.exe
来启动Redis服务器。
3. Redis性能测试方案
测试Redis的性能,可以使用Redis自带的性能测试工具redis-benchmark
,或者一些第三方工具如memtier_benchmark
。
3.1 redis-benchmark测试性能
3.1.1 参数说明
源码编译安装的话redis-benchmark位于src目录下,如果是镜像源安装可以直接运行redis-benchmark命令。
$ redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connect_number} -d {datasize} -t {command}
参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。
参数说明:
-h 表示实例的域名连接地址或IP地址。
-p 表示实例的端口,默认为6379。
-a 表示实例的连接密码,免密连接的实例无需输入-a {password}。
-t 表示执行具体测试命令合集。例如只测试set命令时,使用-t set;如果要测试ping、get、set命令,则使用 -t ping,set,get,命令间使用“,”分隔。不指定则运行全部命令测试。
-c 表示客户端连接数。
-d 表示单条数据大小,单位Byte。
-n 表示测试包数量。
-r 表示使用随机key数量。
-q 输出精简的测试结果。
-P 默认情况下,Redis 客户端一次请求只发起一个命令。通过-P设置每个Pipeline批量执行的命令数量,可以提高性能。
3.1.2 测试执行
# 运行全部命令测试。全部命令测试时间较长,建议根据需求指定部分命令进行测试。
$ redis-benchmark -c 200 -q -n 100000 -r 1000 -d 32
PING_INLINE: 59347.18 requests per second
PING_BULK: 59031.88 requests per second
SET: 54466.23 requests per second
GET: 53590.57 requests per second
INCR: 50581.69 requests per second
LPUSH: 58823.53 requests per second
RPUSH: 59171.59 requests per second
LPOP: 57240.98 requests per second
RPOP: 60606.06 requests per second
SADD: 64516.13 requests per second
HSET: 61576.36 requests per second
SPOP: 50150.45 requests per second
ZADD: 56148.23 requests per second
ZPOPMIN: 55710.31 requests per second
LPUSH (needed to benchmark LRANGE): 52328.62 requests per second
LRANGE_100 (first 100 elements): 34530.39 requests per second
LRANGE_300 (first 300 elements): 13227.51 requests per second
LRANGE_500 (first 450 elements): 9828.98 requests per second
LRANGE_600 (first 600 elements): 8137.36 requests per second
MSET (10 keys): 53705.69 requests per second
# 指定部分命令测试
$ redis-benchmark -c 200 -q -t ping,set -n 100000 -r 1000 -d 32
PING_INLINE: 50100.20 requests per second
PING_BULK: 52192.07 requests per second
SET: 58548.01 requests per second
# 配置-P,命令批量执行。性能提升明显。
$ redis-benchmark -c 200 -q -P 10 -n 100000 -r 1000 -d 32
PING_INLINE: 472723.00 requests per second
PING_BULK: 508636.38 requests per second
SET: 459174.31 requests per second
GET: 548858.69 requests per second
INCR: 504500.00 requests per second
LPUSH: 611707.31 requests per second
RPUSH: 635157.25 requests per second
LPOP: 581686.00 requests per second
RPOP: 609756.06 requests per second
SADD: 519123.69 requests per second
HSET: 512871.81 requests per second
SPOP: 578670.56 requests per second
ZADD: 436130.44 requests per second
ZPOPMIN: 529263.19 requests per second
LPUSH (needed to benchmark LRANGE): 538870.94 requests per second
LRANGE_100 (first 100 elements): 62141.89 requests per second
LRANGE_300 (first 300 elements): 17829.78 requests per second
LRANGE_500 (first 450 elements): 12459.76 requests per second
LRANGE_600 (first 600 elements): 8843.38 requests per second
MSET (10 keys): 176070.17 requests per second
说明:
- 如果是测试单机或主备实例,使用1台客户端即可。
- 如果测试Redis集群,建议多台客户端发起测试,且每台测试客户端各开启两个benchmark客户端。
- redis-benchmark测试cluster集群实例时需要加 --cluster 参数,其他实例类型不需要加。
- 如果想对cluster集群的最大连接数进行性能压测,但是压测到1万连接时程序退出,或者报错 Cannot assign requested address。这说明是测试用的ECS本机性能不足,请先检查自己是否只用了1台ECS进行压测。想要对集群压测,建议准备3台ECS,每台ECS起3个redis-benchmark来测试redis实例的最大连接数。
参考资料:
4. 优化Redis性能的建议
- 配置优化:调整
redis.conf
中的配置,例如maxmemory
、maxclients
等参数。 - 硬件优化:使用更快的内存和多核CPU。
- 持久化策略:选择合适的持久化策略(RDB快照或AOF日志),平衡性能和数据安全。
- 分片与集群:使用Redis分片或集群功能,分散负载,提升整体性能。
- 网络优化:确保低延迟的网络环境,减少网络瓶颈。
通过合理的配置和优化,可以显著提升Redis的性能,满足高并发、低延迟的应用需求。