REDIS的几个测试结果

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

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

线程数 100次INC操作的平均时间 服务端数据
10 140 instantaneous_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
50 560 instantaneous_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
100 1050 instantaneous_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
120 1400 instantaneous_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
150 1570 instantaneous_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 ms instantaneous_ops_per_sec(每秒处理指令数):2538
instantaneous_input_kbps(每秒读字节数):116.52
instantaneous_output_kbps(每秒写字节数):12.40
latest_fork_usec:614
2000000次写 750721ms instantaneous_ops_per_sec(每秒处理指令数):2705
instantaneous_input_kbps(每秒读字节数):126.80
instantaneous_output_kbps(每秒写字节数):13.21
latest_fork_usec:889
数据不持久化 400000次写 145062 ms instantaneous_ops_per_sec(每秒处理指令数):2840
instantaneous_input_kbps(每秒读字节数):130.38
instantaneous_output_kbps(每秒写字节数):13.87
2000000次写 746384ms instantaneous_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数据
时间: 2024-08-12 18:07:39

REDIS的几个测试结果的相关文章

Redis安装及简单测试

题目链接:11645 - Bits 题意:给定一个数字n,要求0-n的二进制形式下,连续11的个数. 思路:和 UVA 11038 这题类似,枚举中间,然后处理两边的情况. 不过本题最大的答案会超过longlong,要用高精度,不过借鉴http://www.cnblogs.com/TO-Asia/p/3214706.html这个人的方法,直接用两个数字来保存一个数字,这样能保存到2个longlong的长度,就足够存放这题的答案了. 代码: #include <stdio.h> #include

记一次Redis和NetMQ的测试

Redis是一个高速缓存K-V数据库,而NetMQ是ZeroMQ的C#实现版本,两者是完全不同的东西. 最近做游戏服务器的时候想到,如果选择一个组件来做服务器间通信的话,ZeroMQ绝对是一个不错的选择,而我们的服务器是用C#的开发的,就这样,找到了NetMQ. NetMQ上手很简单.总结一下大致如下几个步骤: NuGet安装类库引用 创建NetMQContext 根据需要的通讯模型创建NetMQSocket 监听socket.Bind()或者连接socket.Connect() 发送socke

redis实现主从复制-单机测试

一.redis实现主从复制-单机测试1.安装redis tar -zxvf redis-2.8.4.tar.gzcd redis-2.8.4make && make install2.配置主从关系需要在slave服务器的redis.conf中配置slaveof 192.168.1.1 6379 #指定master的ip和端口具体配置见下:cp redis.conf redis-master-6379.confvi2 redis-master-6379.conflogfile "/

Redis介绍及Jedis测试

1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询. Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱

Ubuntu 14.04下Redis安装及简单测试

摘要: Redis是目前业界非常受到欢迎的一个内存数据库,一般用作系统的中间缓存系统,用以提升整体商业系统的吞吐量和响应速度.本文将简要介绍安装的主要过程以及给出一个简要的测试代码. 1.  系统环境和版本说明 Linux操作系统选用Ubuntu 14.04, Redis的版本选取目前的最新稳定版本redis-3.07. 客户端选用了Redis的Java版本jedis 2.4.2. 2.  Redis的安装步骤 a. 下载Redis的安装包 wget http://download.redis.

Redis主从复制配置及测试

1. redis配置文件常用选项说明 daemonize no 说明:是否把redis-server启动在后台,默认是"否".若改成yes,会生成一个pid文件. pidfile /var/run/redis.pid 说明:redis-server的pid文件. port 6379 说明:redis-server的端口号 dbfilename dump.rdb 说明:数据库文件的位置,最好添加绝对路径,若不添加时在启动用户的home目录下. slaveof 说明:设置主从服务器的主服务

redis安装;配置;启动;测试

Redis官方是不支持windows的,只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是:https://github.com/MSOpenTech/redis/releases 下载后直接解压,然后用redis-server  redis.windows.conf 启动,可以将其保存为文件 startup.bat ; 下次就可以直接启动了. 然后可以使用自带的客户端工具进行测试,双击打开 redis-cli.exe , 如果不报

redis安装配置与测试

phpredis: https://github.com/nicolasff/phpredis http://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.html http://redisdoc.com/ window安装:http://windows.php.net/downloads/pecl/snaps/redis/2.2.5/ extension=php_igbinary.dllextension=php_redis.d

Redis Master-Slave 读写分离测试

1 master/slave server 启动 利用默认redis.conf配置文件启动master server,端口6379 . [7304] 29 Aug 09:57:26 - 0 clients connected (0 slaves), 673996 bytes in use [7304] 29 Aug 09:57:31 - DB 0: 15 keys (0 volatile) in 16 slots HT. [7304] 29 Aug 09:57:31 - 0 clients co