本文介绍: 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&gt;
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、jemallocmalloc三种内存分配
# 可使用 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 命令使用多个参数批量请求multibulk 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.x7.x的p50=xxxx msec

  1. 图表说明

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

Version 5.0.3【待优化版本】
# 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【云服务器使用的版本】
# 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最终版】
# 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最终版】
# 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

# 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、noticewarning 日志级别,默认为 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为数值

原文地址:https://blog.csdn.net/weixin_39168541/article/details/130486452

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46054.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注