赞
踩
使用的是腾讯的云服务器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
在 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 命令。
我们暂且将其当作相同的。
性能测试结果为了简洁清晰,去掉了单位requests per second
和6.x\7.x的p50=xxxx msec
。
柱状图为了展示稳定性,折线图为了比对性能。
# 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
# 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
# 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
# 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.
# 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
使用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.
# 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
除7.1.240
版本外,延迟结果相差不大。
除7.1.240
版本外,性能测试结果相差不大,相对最好的是5.0.14
,稳定性上5.0.14和7.1.240
比较好,综合来说当前服务器最好的版本为5.0.14
。
这里列举下比较重要的配置项
配置项名称 | 配置项值范围 | 说明 |
---|---|---|
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为数值。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。