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

简介:
+关注继续查看
从图中可以猜测到还会有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) 开启压缩,没有配置主从
  现在来看一下测试结果:
  从这个图中可以看出:
  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占用过多的连接)。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关实践学习
基于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进行性能测试
475 0
【Redis】(一)SpringBoot 整合Redis缓存并使用Postman+JMeter进行性能测试
|
NoSQL Java fastjson
实战Redis序列化性能测试(Kryo和字符串)
将Java对象实例保存在Redis时,将对象序列化成字符串或者序列化成byte数组再存入,以上两种方式孰优孰劣?字符串方式来存取的好处是编码和调试更简单容易,而byte数组的优势又在哪里呢,实战验证吧
393 0
实战Redis序列化性能测试(Kryo和字符串)
|
存储 NoSQL 安全
万字长文入门 Redis 命令、事务、锁、订阅、性能测试
万字长文入门 Redis 命令、事务、锁、订阅、性能测试
206 0
万字长文入门 Redis 命令、事务、锁、订阅、性能测试
|
网络协议 NoSQL Unix
redis性能测试tcp socket and unix domain
redis性能测试tcp socket and unix domain
411 0
|
NoSQL 测试技术 Redis
|
存储 缓存 监控
如何正确地使用Redis(附性能测试实验结果)
1. 概述简单来说,Redis就是一个数据结构存储器,可以用作数据库、缓存和消息中间件,它和传统数据库主要有两点不同:它是Key-Value型数据库,不是关系型数据库,所有数据以Key-Value的形式存在服务器的内存中,其中Value可以是多种数据结构:字符串(String), 哈希(hashes), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型;它所有运行时
6245 0
如何正确地使用Redis(附性能测试实验结果)
|
NoSQL 测试技术 Redis
redis必杀高级:性能测试
题记: Redis 性能测试是通过同时执行多个命令实现的。 语法:redis 性能测试的基本命令如下: redis-benchmark [option] [option value] 例如: 同时执行10000个命令 127.
1356 0
推荐文章
更多