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/

时间: 2024-09-23 12:49:27

Redis千万级的数据量的性能测试的相关文章

基于Redis 千万级用户排行榜最佳实践

基于Redis 千万级用户排行榜最佳实践 前言 Redis 是一个开源的,内存中的数据结构存储系统,可以用作数据库.缓存和消息队列中间件.它支持多种类型的数据结构,如 字符串(string), Hash, 列表(List), 集合(Set), 有序集合(Sorted Set) . 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(Transactions) 和不同级别的 磁盘持久化(Persistence), 并

千万级-高并发WEB设计问题,来自一个面试题

问题描述 高并发WEB设计问题,来自一个面试题 这是一个面试题,困扰我好长时间了. 有个网站首页,需要满足千万级小数据量用户访问,首页上包含如下几部分: 1 统计部分,全站统计,与具体用户无关,与已存储的数据有关 2 静态页面部分 3 个人统计部分,与当前登录用户用惯,与已存储的数据有关,个人统计数据很少 4 数据部分,与具体内容无关,与已存储的数据有关.数据很少 要求: 1 满足千万级用户访问 2 前端可以负载,可以集群,可以异步 3 后端存储可以是DB,可以是内存,也可以是其他 4 技术 架

一次千万级别的SQL查询简单优化体验

背景:从两张有关联的表查询数据,A表数据量1400万,B表数据量8000万.A与B通过ID逻辑关联,没有实际的外键.B表是后来扩展出来的. 问题:根据某个ID查询时超时,运行时跑不出结果. 原因:使用一个or条件,条件里面有一个是A.ID=B.ID 简单优化:将or条件拆开,使用union all:将之前使用表变量的部分换成了临时表:对排序的字段加上了索引 结果:在50ms内能够查询出结果,这个与之前的超时简直不能相比. 感想:感谢DBA mm的帮助,让我有了这样的体验,不实际的处理(哪怕很简单

如何打造千万级Feed流系统

在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈,微博,就是一种非常典型的Feed流产品,还有图片分享网站Pinterest,花瓣网等又是另一种形式的Feed流产品.除此之外,很多App的都会有一个模块,要么叫动态,要么叫消息广场,这些也是Feed流产品,可以说,Feed流产品是遍布天下所有的App中. 概念 我们在讲如何设计Feed流系统之前,先来看一下Feed流中的一些概念: Feed:Feed流中的每一条状态或者消息都是Feed,比如朋友圈中

Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架_Mysql

MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻的小型系统怎么写都可以,用xx框架可以实现快速开发.可是数据量到了10万,百万至千万,他的性能还能那么高吗?一点小小的失误,可能造成整个系统的改写,甚至更本系统无法正常运行!好了,不那么多废话了.用事实说话,看例子: 数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, id 是逐渐,vtype是tinyint,vtype是索引.这是一个

小米架构师:亿级大数据实时分析与工具选型

本文根据欧阳辰老师在[2016 DAMS中国数据资产管理峰会]现场演讲内容整理而成.   讲师介绍 欧阳辰,超过15年的软件开发和设计经验,目前就职于小米公司,负责小米广告平台的架构研发. 曾为微软公司工作10年,担任高级软件开发主管,领导团队参与微软搜索索引和搜索广告平台的研发工作.曾在甲骨文公司从事数据库和应用服务器的研发工作.热爱架构设计和高可用性系统,特别对于大规模互联网软件的开发,具有丰富的理论知识和实践经验. 大家好,很高兴能跟大家分享一些关于实时数据分析的话题. 刚毕业时我有幸去了

MySQL大数据量快速分页实现

般刚开始学SQL语句的时候,会这样写 代码如下:  代码如下 复制代码 SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候,这样写会慢死 代码如下:  代码如下 复制代码 SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 也许耗费几十秒 网上很多优化的方法是这样的 代码如下:  代码如下 复制代码 SELECT * FROM table WHERE id >= (SELECT

阿里知识图谱首次曝光:每天千万级拦截量,亿级别全量智能审核

借助阿里知识图谱的建设,阿里电商平台管控从过去的"巡检"模式升级为发布端实时逐一检查.在海量的商品发布量的挑战下,最大可能地借助大数据.人工智能阻止坏人.问题商品进入阿里生态.同时面临问题商家实时的对弈.变异和恶意攻击等诸多挑战,知识图谱仍然保持着每天千万级别的拦截量,亿级别的全量智能审核次数,在滥发.侵权.合规.假货.经营范围等多个场景全面与问题卖家正面交锋,实时对弈.为了最大限度地保护知识产权,保护消费者权益,我们对知识图谱推理引擎技术提出了智能化.自学习.毫秒级响应.可解释等更高

ibatis 数据库-ibatis如何快速的在千万级以上的数据里检索数据

问题描述 ibatis如何快速的在千万级以上的数据里检索数据 数据库中的数据是千万级以上的,就是一般的操作日志,一共有40种操作类型,其余的都是一些操作时间和操作的描述,用ibatis查询的时候基本不可用,页面检索需要很长很长的时间,请问有什么办法能做到快速的检索吗