redis持久化性能测试

时间:2022-03-15 08:03:42
一、总结分析        经过测试,在redis同时开启rdb和aof做持久化数据备份的情况下:
 测试在环境redis的内存从0-3.35G的情况下
(a)每个命令的执行性能基本稳定,除LRANGE命令外基本都在5W request/s以上。 (b)重启速度随着持久化文件的变大,而变长。 (c)在redis数据需要内存3.35G,aof:5.9G的情况下,关闭redis,执行shutdown:33.91s,启动加载数据到redis内存需要20.189s。 (d)range的性能随着所取条数的变大而急速下降,因此在使用LRANGE的时候,需要尤其注意。
由于rdb是定时做对redis内存做快照,因此速度比较快,但是也容易丢失数据,aof是追加日志的方式,数据丢失少。通过以下测试,建议:使用redis自身持久化方式,并且同时开启rdb和aof两种持久化测试,rdb根据具体业务定时快照,aof也可以根据具体业务定时rewrite来增加性能

二、在beta环境安装redis做测试

环境配置如下:
Mem:65801104k ,free:43711948k
os:Linux 2.6.32-358.2.1.el6.x86_64 x86_64

redis版本2.8.4,配置:
redis开启RDB save 900 1 (15min内有1次save动作就做快照)
aof:appendfsync everysec

1、安装redis之后redis内存中没有数据的情况下,直接测试:
(a)、redis-benchmark -n 100000 -c 20 -d 256 :20个客户端并发发送了10000个请求,256字节
插入速度最高是的命令SADD:57142 request/s,其它命令基本都在5W以上,只有LRANGE取前100条的时候14556 request/s,其取的条数越多,效率急速下降

(b)、redis-benchmark -n 100000 -c 20 -d 1024,发送1024字节的情况:
插入速度最快的命令是SADD:57471 request/s,其它命令略有下降,只有LRANGE取前100条的时候5546 request/s,其取的条数越多,效率比发送256字节降的更快、更急

2、通过cat data.txt | redis-cli --pipe导入数据,1048576(512*1024*2)个key,value为字符串,每个字符串512b,整个文件(data.txt)大小为512M,产生的aof为548M,dump.rpb尚未生成
(a)、redis-benchmark -n 100000 -c 20 -d 256
插入速度最高是的命令SADD:57142 request/s,其它命令基本都在5W以上,只有LRANGE取前100条的时候15243 request/s,其取的条数越多,效率急速下降

(b)、redis-benchmark -n 100000 -c 20 -d 1024,发送1024字节的情况:
插入速度最高是的命令SADD:56497 request/s,其它命令略有下降,只有LRANGE取前100条的时候5515 request/s,其取的条数越多,效率急速下降

这时候的命令执行性能和在第一次安装redis的时候,基本保持一致
这时候查看redis内存情况:

执行完两个测试之后,持久化文件大小:aof:956M,rdb:372M
内存情况:used_memory:942001704
used_memory_human:898.36M
used_memory_rss:959778816
used_memory_peak:950352256
used_memory_peak_human:906.33M

(c)、redis启动、关闭速度:
这时候关闭redis,执行shutdown :8.74s启动redis加载数据时间:DB loaded from append only file: 3.727 seconds

3、仍然通过cat data.txt | redis-cli --pipe方式,向redis内存添加测试数据
这时redis内存情况:
used_memory:3426856328
used_memory_human:3.19G
used_memory_rss:3472187392
used_memory_peak:3460409832
used_memory_peak_human:3.22G
持久化文件大小:appendonly.aof:4.2G   dump.rdb:1.5G
这时候重启redis:执行shutdown:34.90s,
启动:DB loaded from append only file: 23.425 seconds

(a)、redis-benchmark -n 100000 -c 20 -d 256
插入速度最高是的命令SADD:57142 request/s,其它命令基本都在5W以上,只有LRANGE取前100条的时候15037 request/s,其取的条数越多,效率急速下降
(b)、redis-benchmark -n 100000 -c 20 -d 1024
插入速度最高是的命令SADD:56179 request/s,其它命令略有下降,只有LRANGE取前100条的时候5396 request/s,其取的条数越多,效率急速下降

执行完后:
used_memory:3596452760
used_memory_human:3.35G
used_memory_rss:3663298560
used_memory_peak:3694021168
used_memory_peak_human:3.44G

执行完aof:5.9G
shutdown:33.91s
启动:DB loaded from append only file: 20.189 seconds

4、在不开启任何持久化的情况下:
(a)、redis-benchmark -n 100000 -c 20 -d 256
cpu使用 15.3%
性能最高的命令INCR:67114 request/s, SADD:57471 request/s, 其它命令出LRANGE外基本都在5W request/s以上,Lrange取前100条14409request/s。随着条数的变大,性能急速下降

(b)、redis-benchmark -n 100000 -c 20 -d 1024
cpu最高使用率16.9%
插入性能最高INCR:57803 request/s, SADD:57142 request/s, 其它命令出LRANGE外基本都在5W request/s以上,比发送256B字节的时候略低一点点。LRANGE取前100条5956 request/s。
随着条数的变大,性能急速下降

5:开启aof和rdb持久化的情况下监控CPU的使用情况
redis内存情况
used_memory:3633251800
used_memory_human:3.38G
used_memory_rss:3692384256
used_memory_peak:3672120888
used_memory_peak_human:3.42G
aof:6.3G
(a)、redis-benchmark -n 100000 -c 20 -d 256
插入性能最高的命令SADD:57142  request/s, 其它命令出LRANGE外基本都在5W request/s以上,Lrange取前100条14409request/s。随着条数的变大,性能急速下降
cpu使用了最高20%

(b)、redis-benchmark -n 100000 -c 20 -d 1024
插入性能最高的命令SADD:57803  request/s, 其它命令出LRANGE外基本都在5W request/s以上,Lrange取前100条5518request/s。随着条数的变大,性能急速下降
cpu 16.9%