Redis千万级的数据量的性能测试

简介: 从上篇的图中可以猜测到还会有Redis 2.2.1 的测试,相同的测试环境,1K的数据量,使用ServiceStack.Redis客户端进行如下测试: 1) Set操作 2) Get操作 3) Del操作 每一套测试分别使用三个配置进行测试: 1) 绿色线条的是开启Dump方式的持久化,5...
+关注继续查看

上篇的图中可以猜测到还会有Redis 2.2.1 的测试,相同的测试环境,1K的数据量,使用ServiceStack.Redis客户端进行如下测试:

1) Set操作

2) Get操作

3) Del操作

每一套测试分别使用三个配置进行测试:

1) 绿色线条的是开启Dump方式的持久化,5分钟持久化一次

2) 蓝色线条是开启AOF方式的持久化,每秒写入磁盘一次

3) 红色线条是关闭任何的持久化方式

对于每一个配置都使用相同的其他配置:

1) 开启VM 最大内存10GB(128字节一页)之后开始换出,VM空间160GB

2) 最大使用内存15GB,确保在Dump的时候有足够的剩余内存

3) 开启压缩,没有配置主从

现在来看一下测试结果:

image

从这个图中可以看出:

1) 对于没有持久化的方式,读写都在数据量达到800万的时候,性能下降几倍,此时正好是达到内存10G,Redis开始换出到磁盘的时候。并且从那以后再也没办法重新振作起来,性能比Mongodb还要差很多。

2) 对于AOF持久化的方式,总体性能并不会比不带持久化方式差太多,都是在到了千万数据量,内存占满之后读的性能只有几百。

3) 对于Dump持久化方式,读写性能波动都比较大,可能在那段时候正在Dump也有关系,并且在达到了1400万数据量之后,读写性能贴底了。在Dump的时候,不会进行换出,而且所有修改的数据还是创建的新页,内存占用比平时高不少,超过了15GB。而且Dump还会压缩,占用了大量的CPU。也就是说,在那个时候内存、磁盘和CPU的压力都接近极限,性能不差才怪。

总结一下:

1) Redis其实只适合作为缓存,而不是数据库或是存储。它的持久化方式适用于救救急啥的,不太适合当作一个普通功能来用。对于这个版本的Redis,不建议使用任何的持久化方式。否则到时候可能会死的比较难看。说白了,期望Redis是memcached的升级版,带有各种数据结构,但是不要期望Redis来和Mongodb/Kt等来比。

2) 对于VM其实也是不建议开启,虽然开启VM可以让Redis保存比内存更多的数据,但是如果冷热数据不是很明显的话性能会非常差(我的测试都是随机查询Key,冷热不明显)。当然,对于冷热明显的情况下可以设置200% - 400%的内存作为VM空间,也不建议设置10倍的内存空间作为VM(像我的配置一样)。

3) ServiceStack.Redis客户端好像有几个Bug,首先RedisTypedClient的Dispose居然没有实现,应该是要调用client.Dispose(),其次RedisNativeClient的Info属性不是每次都获取最新值的,第三PooledRedisClientManager的WritePoolIndex和ReadPoolIndex只看到加没看到减的地方,也不知道这是干啥的,其实每次都取第一个不是Active的Client就可以了,PooledRedisClientManager也没有把超时使用的Active的Client强制回收(避免使用的时候忘记Dispose占用过多的连接)有关这几点,我会尝试联系ServiceStack.Redis的作者。

作者:lovecindywang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
NoSQL 测试技术 Redis
Redis性能测试
Redis性能测试
298 0
|
缓存 NoSQL 关系型数据库
【Redis】(一)SpringBoot 整合Redis缓存并使用Postman+JMeter进行性能测试
【Redis】(一)SpringBoot 整合Redis缓存并使用Postman+JMeter进行性能测试
471 0
【Redis】(一)SpringBoot 整合Redis缓存并使用Postman+JMeter进行性能测试
|
NoSQL Java fastjson
实战Redis序列化性能测试(Kryo和字符串)
将Java对象实例保存在Redis时,将对象序列化成字符串或者序列化成byte数组再存入,以上两种方式孰优孰劣?字符串方式来存取的好处是编码和调试更简单容易,而byte数组的优势又在哪里呢,实战验证吧
389 0
实战Redis序列化性能测试(Kryo和字符串)
|
存储 NoSQL 安全
万字长文入门 Redis 命令、事务、锁、订阅、性能测试
万字长文入门 Redis 命令、事务、锁、订阅、性能测试
206 0
万字长文入门 Redis 命令、事务、锁、订阅、性能测试
|
存储 NoSQL 数据管理
Redis高可用篇:Cluster集群能支持的数据量有多大?(一)
本文将对集群的节点、槽指派、命令执行、重新分片、转向、故障转移、消息等各个方面进行深入拆解。
289 1
Redis高可用篇:Cluster集群能支持的数据量有多大?(一)
|
网络协议 NoSQL Unix
redis性能测试tcp socket and unix domain
redis性能测试tcp socket and unix domain
410 0
|
NoSQL 数据挖掘 Devops
devops| redis 数据量暴涨进行数据清理实战
redis 作为程序员的 「瑞士军刀」, 在现有业务中扮演着重要的角色. 为了避免触雷, 「保卫世界和平」, 对 redis 数据进行分析并清理.
124 0
|
NoSQL 测试技术 Redis
推荐文章
更多