码迷,mamicode.com
首页 > 其他好文 > 详细

REDIS的几个测试结果

时间:2015-06-30 18:38:11      阅读:7326      评论:0      收藏:0      [点我收藏+]

标签:performance   redis   

场景一:对单一键大并发量增加(INC)操作,模拟对热点产品的库存修改

测试点:
   原子性,保证最后的键值等于所有键值增加操作的总和性能,
   保证在大并发量下写操作的性能没有大的降低


线程数100次INC操作的平均时间服务端数据
10140instantaneous_ops_per_sec(每秒处理指令数):342
instantaneous_input_kbps(每秒读字节数):10.70
instantaneous_output_kbps(每秒写字节数):1.90
used_cpu_sys(系统CPU使用量):0.05
used_cpu_user(用户CPU使用量):0.03
50560instantaneous_ops_per_sec(每秒处理指令数):2780
instantaneous_input_kbps(每秒读字节数):86.89
instantaneous_output_kbps(每秒写字节数):18.20
used_cpu_sys(系统CPU使用量):0.48
used_cpu_user(用户CPU使用量):0.37
1001050instantaneous_ops_per_sec(每秒处理指令数):5766
instantaneous_input_kbps(每秒读字节数):180.22
instantaneous_output_kbps(每秒写字节数):38.60
used_cpu_sys(系统CPU使用量):1.31
used_cpu_user(用户CPU使用量):0.52
1201400instantaneous_ops_per_sec(每秒处理指令数):6857
instantaneous_input_kbps(每秒读字节数):214.29
instantaneous_output_kbps(每秒写字节数):46.87
used_cpu_sys(系统CPU使用量):2.51
used_cpu_user(用户CPU使用量):0.81
1501570instantaneous_ops_per_sec(每秒处理指令数):8350
instantaneous_input_kbps(每秒读字节数):260.95
instantaneous_output_kbps(每秒写字节数):58.74
used_cpu_sys(系统CPU使用量):4.04
used_cpu_user(用户CPU使用量):1.13

结论:
   客户端100次操作的时间随着线程数增加而增加,但是服务端的处理量并没有达到极限,CPU的使用量也不高,可见REDIS处理高并发请求没有问题.
Jvisualvm 分析结果:客户端处理时间长主要是由于线程切换的代价和网络开销

技术分享

场景二:数据持久化测试

数据占用内存大小:
         400000条数据,键长度20,数据长度1.   总共占用 28.90M
         2000000条数据,键长度20,数据长度1. 总共占用138.55M


持久化模式数据量客户端时间服务端数据

RDB模式,数据快照定期写入磁盘

 

规则:每900秒如果数据改变超过1次则写入磁盘

 

每300秒如果数据改变超过10次则写入磁盘

 

每60秒如果数据改变超过10000次则写入磁盘

400000次写148397 msinstantaneous_ops_per_sec(每秒处理指令数):2538
instantaneous_input_kbps(每秒读字节数):116.52
instantaneous_output_kbps(每秒写字节数):12.40
latest_fork_usec:614
2000000次写750721msinstantaneous_ops_per_sec(每秒处理指令数):2705
instantaneous_input_kbps(每秒读字节数):126.80
instantaneous_output_kbps(每秒写字节数):13.21
latest_fork_usec:889
数据不持久化
400000次写145062 msinstantaneous_ops_per_sec(每秒处理指令数):2840
instantaneous_input_kbps(每秒读字节数):130.38
instantaneous_output_kbps(每秒写字节数):13.87
2000000次写746384msinstantaneous_ops_per_sec(每秒处理指令数):2723
instantaneous_input_kbps(每秒读字节数):127.68
instantaneous_output_kbps(每秒写字节数):13.30
数据复制到一个节点
400000次写210540ms

instantaneous_ops_per_sec(每秒处理指令数):2222

instantaneous_input_kbps(每秒读字节数):102.00

instantaneous_output_kbps(每秒写字节数):112.83
2000000次写9249390ms

instantaneous_ops_per_sec(每秒处理指令数):2126

instantaneous_input_kbps(每秒读字节数):99.69

instantaneous_output_kbps(每秒写字节数):110.05

AOF 模式

Fysnc per second

 

操作以日志方式写入磁盘,每秒将日志从磁盘缓冲区刷入硬盘


400000次写158809ms

instantaneous_ops_per_sec(每秒处理指令数):2169

instantaneous_input_kbps(每秒读字节数):99.59

instantaneous_output_kbps(每秒写字节数):10.59
2000000次写

765037ms

instantaneous_ops_per_sec(每秒处理指令数):2656

instantaneous_input_kbps(每秒读字节数):124.54

instantaneous_output_kbps(每秒写字节数):12.97

AOF 模式:

Fsync always

 

操作以日志方式写入磁盘,每次操作将日志从磁盘缓冲刷入硬盘
400000次写583053ms

instantaneous_ops_per_sec(每秒处理指令数):642

instantaneous_input_kbps(每秒读字节数):29.49

instantaneous_output_kbps(每秒写字节数):3.14
2000000次写3154548ms

instantaneous_ops_per_sec(每秒处理指令数):613

instantaneous_input_kbps(每秒读字节数):28.77

instantaneous_output_kbps(每秒写字节数):2.99

AOF 模式:

Fsync never

 

操作以日志方式写入磁盘,由操作系统决定何时将日志从磁盘缓冲刷入硬盘
400000次写

152612ms

instantaneous_ops_per_sec(每秒处理指令数):2725

instantaneous_input_kbps(每秒读字节数):125.07

instantaneous_output_kbps(每秒写字节数):13.30
2000000次写769203ms

instantaneous_ops_per_sec(每秒处理指令数):2710

instantaneous_input_kbps(每秒读字节数):127.03

instantaneous_output_kbps(每秒写字节数):13.23

RDB模式,数据快照定期写入磁盘

 

规则:每900秒如果数据改变超过1次则写入磁盘

 

每300秒如果数据改变超过10次则写入磁盘

 

每60秒如果数据改变超过10000次则写入磁盘

 

使用PIPELINE 批量操作,每10000条COMMIT 一次
400000次写1429ms

instantaneous_ops_per_sec(每秒处理指令数):131611

instantaneous_input_kbps(每秒读字节数):6040.77

instantaneous_output_kbps(每秒写字节数):641.57
2000000次写6740ms

instantaneous_ops_per_sec(每秒处理指令数):161782

instantaneous_input_kbps(每秒读字节数):7583.55

instantaneous_output_kbps(每秒写字节数):791.00

结论:

  • RDB模式和不持久化性能差别并非很大,主要是RDB通过FORK的方式来复制数据,对主进程的读写没有影响.但是单次FORK的开销较大,而且FORK时会消耗两倍的内存

  • AOF模式每秒FSYNC和操作系统FSYNC的差别并不大,但是总是FSYNC的性能急剧下降,每秒FSYNC是一个比较合适的选择,最多丢失1秒钟的数据,性能也不错

  • 数据量大对写操作的性能并没有太多影响

  • 实测中日志主从复制对于性能有不小的影响,但由于是单机模拟集群测试,硬件和网络都是共享的,数据可能不准,建议在实际环境中再测试

  • 4百万数据读性能仍然在5到7毫秒/条

  • 数据恢复: 4百万数据,RDB模式初始化需要大约4.12秒时间 (可从redis.log中查到), AOF模式初始化需要大约6.216秒时间

  • PIPELINE批量处理模式对于写性能的提升是巨大的,但是使用场景比较有限,一般可以用于初始REDIS数据


REDIS的几个测试结果

标签:performance   redis   

原文地址:http://shadowisper.blog.51cto.com/3189863/1669464

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!