Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)

1.环境说明

使用的是腾讯的云服务器1核心2G内存50G存储的乞丐版,系统信息如下:

[root@tcloud ~]# rpm -qi centos-release
Name        : centos-release
Version     : 7
Release     : 9.2009.1.el7.centos
Architecture: x86_64
Install Date: Tue 19 Jan 2021 06:23:16 PM CST
Group       : System Environment/Base
Size        : 44787
License     : GPLv2
Signature   : RSA/SHA256, Thu 03 Dec 2020 12:35:28 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : centos-release-7-9.2009.1.el7.centos.src.rpm
Build Date  : Mon 23 Nov 2020 11:08:41 PM CST
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
Summary     : CentOS Linux release file
Description :
CentOS Linux release files

全部版本下载地址https://download.redis.io/releases/,Redis安装配置:

# 0.卸载
rm -rf /usr/local/redis

# 1.安装依赖否则报错【/bin/sh: cc: 未找到命令】
yum install gcc-c++ -y

# 2.解压文件
tar -zvxf redis-{
    
    版本号}.tar.gz

# 3.移动文件
mv ./redis-{
    
    版本号} /usr/local/redis-{
    
    版本号}

# 4.编译
cd /usr/local/redis-{
    
    版本号}/
make

# 5.安装
make PREFIX=/usr/local/redis-{
    
    版本号} install
# 如不添加PREFIX指定安装文件夹Linux会将可执行文件存放在/usr/local/bin、库文件会存放在/usr/local/lib、配置文件会存放在/usr/local/etc,其他的资源文件会存放在usr/local/share目录,不便于清理,指定安装文件夹后,使用 rm -rf /usr/local/redis 即可清除 Redis。

# 6.配置【保持默认】
vim /usr/local/redis-{
    
    版本号}/redis.conf
	# 后台启动
	daemonize yes

# 7.启动
./bin/redis-server ./redis.conf
# 测试使用默认分配器。
# redis内存管理方式:支持tcmalloc、jemalloc、malloc三种内存分配。
# 可使用 info Memory 命令查询碎片信息。

make MALLOC=jemalloc
# MALLOC 选项是用于指定使用的内存分配库。该选项可以指定链接器使用指定的内存分配库,从而将程序编译成使用指定库的可执行文件。
# MALLOC=jemalloc 指定链接器使用 jemalloc 库中的 malloc 函数来代替标准的 malloc 函数,以获得更好的性能。这对于一些需要更高内存效率和更低内存碎片的应用程序非常有用,已内置是Redis的默认选项。
# MALLOC=tcmalloc 指定链接器使用 tcmalloc 库中的 malloc 函数来代替标准的 malloc 函数,使用时需要安装。
# MALLOC=libc 指定链接器使用 GNU C 库中包含的 malloc 函数作为程序的默认内存分配函数,使用时需要安装。

为控制尽可能的控制变量,不同版本的Redis测试前重启服务器,测试命令为:

# 1.查看内存分配器的版本 info memory

# 2.延迟测试
./bin/redis-cli --intrinsic-latency 10
# 表示到目前为止最慢的一次运行的延迟是6890微秒。
Max latency so far: 6890 microseconds.
# 表示总共运行了151480390次,平均延迟为0.0660微秒/每次,即66.02纳秒/每次。
151480390 total runs (avg latency: 0.0660 microseconds / 66.02 nanoseconds per run).
# 表示最慢的一次运行比平均延迟慢了104370倍。
Worst run took 104370x longer than the average latency.

# 3.性能测试【测试三轮使用平均值】
./bin/redis-benchmark -q

2.测试结果

  1. 关于结果中的 PING_MBULK 和 PING_BULK

在 Redis 中,PING_MBULK 和 PING_BULK 都是用来测试与 Redis 服务器之间的连接是否正常的命令。但是,它们使用的协议和返回结果格式略有不同。

PING_MBULK 命令使用多个参数的批量请求(multi-bulk request)协议,它将一个字符串数组作为参数发送到 Redis 服务器,服务器返回对应的字符串数组作为响应。如果服务器正常运行,它将返回 “PONG” 字符串作为响应,而且需要注意的是,这个字符串响应可能包含在数组中。因此,PING_MBULK 请求发送到 Redis 服务器时,它的第一个参数应该是数组的长度,后面跟随着每个参数。例如,PING_MBULK 2 hello world 命令将发送一个长度为 2 的数组,包含字符串 “hello” 和 “world” 作为参数,并返回一个长度为 2 的数组,包含响应字符串 “PONG”。

PING_BULK 命令使用单个参数的批量请求(bulk request)协议,它将一个字符串作为参数发送到 Redis 服务器,服务器也将返回对应的字符串作为响应。PING_BULK 命令和 PING_MBULK 命令的唯一区别是参数格式的不同。PING_BULK 命令只需要一个字符串参数,例如 PING_BULK hello 命令将发送字符串 “hello” 作为参数,并且返回相同的字符串 “hello” 作为响应。

因此,虽然 PING_MBULK 和 PING_BULK 命令都可以用来测试连接是否正常,但是它们使用的协议和返回结果格式是不同的。如果你希望发送多个参数,可以使用 PING_MBULK 命令;如果你只需要一个参数,则可以使用 PING_BULK 命令。

我们暂且将其当作相同的。

  1. 关于性能测试结果数据

性能测试结果为了简洁清晰,去掉了单位requests per second和6.x\7.x的p50=xxxx msec

  1. 图表说明

柱状图为了展示稳定性,折线图为了比对性能。

Version 5.0.3【待优化版本】

  • 内存分配器版本 mem_allocator:jemalloc-5.1.0
  • 延迟测试结果
# 1
150584708 total runs (avg latency: 0.0664 microseconds / 66.41 nanoseconds per run).
Worst run took 93393x longer than the average latency.
# 2
151425412 total runs (avg latency: 0.0660 microseconds / 66.04 nanoseconds per run).
Worst run took 121928x longer than the average latency.
# 3
151173847 total runs (avg latency: 0.0661 microseconds / 66.15 nanoseconds per run).
Worst run took 121453x longer than the average latency.
  • 性能测试结果
# 1
PING_INLINE: 63734.86
PING_BULK: 64641.24
SET: 63451.78
GET: 62421.97
INCR: 60496.07
LPUSH: 59916.12
RPUSH: 63051.70
LPOP: 62500.00
RPOP: 62227.75
SADD: 63532.40
HSET: 60938.45
SPOP: 64184.86
LPUSH (needed to benchmark LRANGE): 62111.80
LRANGE_100 (first 100 elements): 34590.11
LRANGE_300 (first 300 elements): 15938.79
LRANGE_500 (first 450 elements): 11619.80
LRANGE_600 (first 600 elements): 9228.50
MSET (10 keys): 54288.82
# 2
PING_INLINE: 63897.76
PING_BULK: 63613.23
SET: 60938.45
GET: 61500.61
INCR: 63734.86
LPUSH: 60459.49
RPUSH: 62695.92
LPOP: 60459.49
RPOP: 60642.81
SADD: 63211.12
HSET: 62500.00
SPOP: 64391.50
LPUSH (needed to benchmark LRANGE): 61842.92
LRANGE_100 (first 100 elements): 33692.72
LRANGE_300 (first 300 elements): 16147.26
LRANGE_500 (first 450 elements): 11687.71
LRANGE_600 (first 600 elements): 9188.64
MSET (10 keys): 54914.88
# 3
PING_INLINE: 61690.31
PING_BULK: 65316.79
SET: 62460.96
GET: 64474.53
INCR: 63938.62
LPUSH: 62266.50
RPUSH: 60569.35
LPOP: 59952.04
RPOP: 62853.55
SADD: 63011.97
HSET: 62853.55
SPOP: 63451.78
LPUSH (needed to benchmark LRANGE): 60459.49
LRANGE_100 (first 100 elements): 34602.07
LRANGE_300 (first 300 elements): 16155.09
LRANGE_500 (first 450 elements): 11665.89
LRANGE_600 (first 600 elements): 9236.17
MSET (10 keys): 53447.35

在这里插入图片描述

Version 5.0.7【云服务器使用的版本】

  • 内存分配器版本 mem_allocator:jemalloc-5.1.0
  • 延迟测试结果
# 1
150104030 total runs (avg latency: 0.0666 microseconds / 66.62 nanoseconds per run).
Worst run took 103602x longer than the average latency.
# 2
150460074 total runs (avg latency: 0.0665 microseconds / 66.46 nanoseconds per run).
Worst run took 159969x longer than the average latency.
# 3
149924658 total runs (avg latency: 0.0667 microseconds / 66.70 nanoseconds per run).
Worst run took 236686x longer than the average latency.
  • 性能测试结果
# 1
PING_INLINE: 61349.70                                                    
PING_BULK: 62656.64                                                    
SET: 61881.19                                                    
GET: 63091.48                                                    
INCR: 62150.41                                                    
LPUSH: 61199.51                                                    
RPUSH: 60132.29                                                    
LPOP: 60422.96                                                    
RPOP: 59523.81                                                    
SADD: 63331.22                                                    
HSET: 61614.29                                                    
SPOP: 64143.68                                                    
LPUSH (needed to benchmark LRANGE): 57603.69                                                    
LRANGE_100 (first 100 elements): 33658.70                                                    
LRANGE_300 (first 300 elements): 16350.56                                                    
LRANGE_500 (first 450 elements): 11745.36                                                    
LRANGE_600 (first 600 elements): 9299.73                                                    
MSET (10 keys): 52603.89                                                    
# 2
PING_INLINE: 62735.26                                                    
PING_BULK: 63091.48                                                    
SET: 61728.39                                                    
GET: 63371.36                                                    
INCR: 62893.08                                                    
LPUSH: 59701.50                                                    
RPUSH: 61050.06                                                    
LPOP: 61387.36                                                    
RPOP: 61804.70                                                    
SADD: 62421.97                                                    
HSET: 61387.36                                                    
SPOP: 61199.51                                                    
LPUSH (needed to benchmark LRANGE): 60496.07                                                    
LRANGE_100 (first 100 elements): 34376.07                                                    
LRANGE_300 (first 300 elements): 16144.66                                                    
LRANGE_500 (first 450 elements): 11893.43                                                    
LRANGE_600 (first 600 elements): 9187.80                                                    
MSET (10 keys): 51813.47                                                    
# 3
PING_INLINE: 60277.27                                                    
PING_BULK: 61199.51                                                    
SET: 62853.55                                                    
GET: 63492.06                                                    
INCR: 63131.31                                                    
LPUSH: 60827.25                                                    
RPUSH: 60679.61                                                    
LPOP: 61425.06                                                    
RPOP: 62539.09                                                    
SADD: 63331.22                                                    
HSET: 61766.52                                                    
SPOP: 64143.68                                                    
LPUSH (needed to benchmark LRANGE): 60716.46                                                    
LRANGE_100 (first 100 elements): 34387.89                                                    
LRANGE_300 (first 300 elements): 16441.96                                                    
LRANGE_500 (first 450 elements): 11851.15                                                    
LRANGE_600 (first 600 elements): 9350.16                                                    
MSET (10 keys): 53475.94                                                    

在这里插入图片描述

Version 5.0.14【5.x最终版】

  • 内存分配器版本 mem_allocator:jemalloc-5.1.0
  • 延迟测试结果
# 1
151427848 total runs (avg latency: 0.0660 microseconds / 66.04 nanoseconds per run).
Worst run took 86041x longer than the average latency.
# 2
151490061 total runs (avg latency: 0.0660 microseconds / 66.01 nanoseconds per run).
Worst run took 98196x longer than the average latency.
# 3
145840102 total runs (avg latency: 0.0686 microseconds / 68.57 nanoseconds per run).
Worst run took 349797x longer than the average latency.
  • 性能测试结果
# 1
PING_INLINE: 60901.34      
PING_BULK: 62227.75      
SET: 63011.97      
GET: 63572.79      
INCR: 64102.57      
LPUSH: 60240.96      
RPUSH: 61387.36      
LPOP: 61690.31      
RPOP: 63211.12      
SADD: 63775.51      
HSET: 61804.70      
SPOP: 64599.48      
LPUSH (needed to benchmark LRANGE): 60024.01      
LRANGE_100 (first 100 elements): 34818.94      
LRANGE_300 (first 300 elements): 16423.06      
LRANGE_500 (first 450 elements): 11877.90      
LRANGE_600 (first 600 elements): 9272.14      
MSET (10 keys): 52164.84      
# 2
PING_INLINE: 63131.31      
PING_BULK: 63897.76      
SET: 61728.39      
GET: 63331.22      
INCR: 64061.50      
LPUSH: 62344.14      
RPUSH: 62617.41      
LPOP: 62656.64      
RPOP: 62735.26      
SADD: 61425.06      
HSET: 62972.29      
SPOP: 64935.07      
LPUSH (needed to benchmark LRANGE): 62500.00      
LRANGE_100 (first 100 elements): 35273.37      
LRANGE_300 (first 300 elements): 16134.24      
LRANGE_500 (first 450 elements): 11917.53      
LRANGE_600 (first 600 elements): 9272.14      
MSET (10 keys): 54644.81      
# 3
PING_INLINE: 61500.61      
PING_BULK: 64143.68      
SET: 63131.31      
GET: 63979.53
INCR: 63451.78      
LPUSH: 62150.41      
RPUSH: 61652.28      
LPOP: 60350.03      
RPOP: 63051.70      
SADD: 63816.21      
HSET: 61842.92      
SPOP: 64599.48      
LPUSH (needed to benchmark LRANGE): 61804.70      
LRANGE_100 (first 100 elements): 33967.39      
LRANGE_300 (first 300 elements): 16315.88      
LRANGE_500 (first 450 elements): 11687.71      
LRANGE_600 (first 600 elements): 9197.09      
MSET (10 keys): 53966.54      

在这里插入图片描述

Version 6.2.12【6.x最终版】

  • 内存分配器版本 mem_allocator:jemalloc-5.1.0
  • 延迟测试结果
# 1
150688768 total runs (avg latency: 0.0664 microseconds / 66.36 nanoseconds per run).
Worst run took 108059x longer than the average latency.
# 2
150739896 total runs (avg latency: 0.0663 microseconds / 66.34 nanoseconds per run).
Worst run took 94966x longer than the average latency.
# 3
151686617 total runs (avg latency: 0.0659 microseconds / 65.93 nanoseconds per run).
Worst run took 88433x longer than the average latency.
  • 性能测试结果【比5.x的多了ZADD、ZPOPMIN,汇总时不比对这几项】
# 1
PING_INLINE: 62617.41                                      
PING_MBULK: 63816.21                                       
SET: 60496.07
GET: 63051.70
INCR: 63291.14 
LPUSH: 60975.61
RPUSH: 61957.87
LPOP: 60532.69 
RPOP: 60024.01 
SADD: 63451.78 
HSET: 61804.70 
SPOP: 63371.36 
ZADD: 61312.08 
ZPOPMIN: 63251.11                                          
LPUSH (needed to benchmark LRANGE): 59701.50               
LRANGE_100 (first 100 elements): 34199.73                  
LRANGE_300 (first 300 elements): 15989.77                  
LRANGE_500 (first 500 elements): 10660.98                  
LRANGE_600 (first 600 elements): 9031.79                   
MSET (10 keys): 51759.83                                   
# 2
PING_INLINE: 61312.08                                      
PING_MBULK: 63694.27                                       
SET: 61124.69
GET: 60679.61
INCR: 62774.64 
LPUSH: 61050.06
RPUSH: 60496.07
LPOP: 60975.61 
RPOP: 62227.75 
SADD: 63171.20 
HSET: 61804.70 
SPOP: 63979.53 
ZADD: 57736.72 
ZPOPMIN: 62972.29                                          
LPUSH (needed to benchmark LRANGE): 60096.15               
LRANGE_100 (first 100 elements): 34013.61                  
LRANGE_300 (first 300 elements): 15676.44                  
LRANGE_500 (first 500 elements): 10571.94                  
LRANGE_600 (first 600 elements): 9108.30                   
MSET (10 keys): 54288.82                                   
# 3
PING_INLINE: 62695.92                                      
PING_MBULK: 61199.51                                       
SET: 62111.80
GET: 63131.31
INCR: 63532.40 
LPUSH: 60864.27
RPUSH: 61804.70
LPOP: 59880.24 
RPOP: 60422.96 
SADD: 62972.29 
HSET: 62227.75 
SPOP: 63211.12 
ZADD: 61500.61 
ZPOPMIN: 63051.70                                          
LPUSH (needed to benchmark LRANGE): 58651.02               
LRANGE_100 (first 100 elements): 33355.57                  
LRANGE_300 (first 300 elements): 15770.38                  
LRANGE_500 (first 500 elements): 10511.93                  
LRANGE_600 (first 600 elements): 9005.76                   
MSET (10 keys): 53937.43

在这里插入图片描述

Version 7.2-rc1【当前最新的发布候选版】

使用redis-cli -v实际显示的版本为redis-cli 7.1.240

  • 内存分配器版本 mem_allocator:jemalloc-5.2.1【有所升级】
  • 延迟测试结果
# 1
145147429 total runs (avg latency: 0.0689 microseconds / 68.90 nanoseconds per run).
Worst run took 110893x longer than the average latency.
# 2
144972616 total runs (avg latency: 0.0690 microseconds / 68.98 nanoseconds per run).
Worst run took 142175x longer than the average latency.
# 3
143717969 total runs (avg latency: 0.0696 microseconds / 69.58 nanoseconds per run).
Worst run took 323797x longer than the average latency.
  • 性能测试结果【比5.x的多了ZADD、ZPOPMIN、XADD,汇总时不比对这几项】
# 1
PING_INLINE: 59276.82                          
PING_MBULK: 60642.81                           
SET: 56657.22
GET: 57537.40
INCR: 56593.10
LPUSH: 56721.50                                
RPUSH: 57142.86                                
LPOP: 55524.71
RPOP: 57045.07
SADD: 57770.08
HSET: 55096.42
SPOP: 59453.03
ZADD: 57110.22
ZPOPMIN: 58788.95                              
LPUSH (needed to benchmark LRANGE): 56850.48   
LRANGE_100 (first 100 elements): 24863.25      
LRANGE_300 (first 300 elements): 10794.47      
LRANGE_500 (first 500 elements): 7001.82       
LRANGE_600 (first 600 elements): 5853.09       
MSET (10 keys): 42716.79                       
XADD: 51652.89
# 2
PING_INLINE: 59311.98                          
PING_MBULK: 60864.27                           
SET: 54945.05
GET: 58309.04
INCR: 59066.75
LPUSH: 56689.34                                
RPUSH: 55679.29                                
LPOP: 56433.41
RPOP: 54674.69
SADD: 56401.58
HSET: 56915.20
SPOP: 59136.61
ZADD: 55096.42
ZPOPMIN: 57803.47                              
LPUSH (needed to benchmark LRANGE): 54975.26   
LRANGE_100 (first 100 elements): 25207.96      
LRANGE_300 (first 300 elements): 10735.37      
LRANGE_500 (first 500 elements): 7007.71       
LRANGE_600 (first 600 elements): 5928.03       
MSET (10 keys): 42301.18                       
XADD: 49504.95
# 3
PING_INLINE: 59311.98                          
PING_MBULK: 58479.53                           
SET: 56053.81
GET: 58479.53
INCR: 58105.75
LPUSH: 56465.27                                
RPUSH: 57339.45                                
LPOP: 56053.81
RPOP: 54674.69
SADD: 58479.53
HSET: 57045.07
SPOP: 58616.65
ZADD: 57045.07
ZPOPMIN: 58004.64                              
LPUSH (needed to benchmark LRANGE): 55710.31   
LRANGE_100 (first 100 elements): 25163.56      
LRANGE_300 (first 300 elements): 10778.19      
LRANGE_500 (first 500 elements): 6926.17       
LRANGE_600 (first 600 elements): 5850.01       
MSET (10 keys): 42444.82                       
XADD: 49925.11

在这里插入图片描述

3.汇总分析

3.1 延迟测试结果汇总

在这里插入图片描述
7.1.240版本外,延迟结果相差不大。

3.1 性能测试结果汇总

在这里插入图片描述
7.1.240版本外,性能测试结果相差不大,相对最好的是5.0.14,稳定性上5.0.14和7.1.240比较好,综合来说当前服务器最好的版本为5.0.14

4.其他参数

这里列举下比较重要的配置项

配置项名称 配置项值范围 说明
daemonize yes、no yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行。
port 指定 Redis 监听端口,默认端口为 6379。
bind 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。
protected-mode yes 、no 保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接redis服务则需要将此属性改为no。
timeout 300 当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
loglevel debug、verbose、notice、warning 日志级别,默认为 notice
databases 16 设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到
rdbcompression yes、no 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
dbfilename dump.rdb 指定本地数据库文件名,默认值为 dump.rdb
dir 指定本地数据库存放目录
requirepass 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭
maxclients 0 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。
maxmemory XXX 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值。

猜你喜欢

转载自blog.csdn.net/weixin_39168541/article/details/130486452
今日推荐