阅读更多

6顶
0踩

数据库

转载新闻 Redis作者详谈2.4版本改进

2011-08-02 11:09 by 副主编 wangguo 评论(2) 有6656人浏览

    本文内容来源于Redis作者 antirez 的博文,由NoSQLFan进行翻译。在文中他首先解释了由于Redis集群可能在较长一段时间内还处理开发阶段,为了避免稳定版本由于这一原因被无限延后,于是从2.2版本fork出了一个2.4分支,这一分支目前进行了一些新的优化改进及bug修复,如果没有严重bug将会在近几个星期内发布稳定版本。

 

 

随后作者列出了2.4版本中的一大堆优化改进及Bug修复,主要有下面一些:

  • 对小数据量的sorted sets结构的内存使用做很大的优化
  • RDB文件的持久化速度也将会大大提高
  • 对目前的一些写操作命令进行了改进,支持批量写入功能
  • 启用新的内存分配模式 jemalloc.
  • 通过对copy on write机制使用的优化,数据持久化保存的子进程的内存占用将大大减少
  • INFO内容更加丰富
  • 新的OBJECT命令,提供对Redis存储value结构描述
  • 新的CLIENT命令,提供对Redis客户端连接的信息描述
  • 彻底将Slave对Master的连接改成非阻塞,之前connect(2)系统调用是会阻塞的
  • Redis-benchmark、Redis-cli 都进行了几个方面的改进
  • Make 改为彩色输出,更易读
  • VM机制彻底废弃
  • 总的来说2.4版本会在各方面有性能上的提升
  • Redis测试框架也有非常大的提升

后面又详细对其中的一些方面做了深入讲解

 

1. 对Sorted Sets的内存优化

 

实际上在2.2版本中,Redis就对小数据量Value的情况做了性能优化,主要优化方式是将小数据量的Value值不再按具体的数据结构存储,而是存在一块二进制的整块数据。而这一改进一直没能应用于Sorted Sets数据结构上来,而在2.4版本中,作者终于想到合适的办法把Sorted Sets在小数据量下也进行了此种优化。

 

2. RDB文件持久化提速

 

这块很大程度上依赖于上面第1点,由于小量数据被存为一个大的二进制数据块,所以在持久化的时候,就不需要再遍历数据了,只需要一个key进行一次持久化写入。

 

3. 提供批量写入功能

 

下面是所有提供批量写入功能的命令

  • SADD set val1 val2 val3 … — 返回添加的元素个数
  • HDEL hash field2 field3 field3 … — 返回删除的元素个数
  • SREM set val1 val2 val3 … – 返回删除的元素个数
  • ZREM zset val1 val2 val3 … – 返回删除的元素个数
  • ZADD zset score1 val1 score2 val2 … – 返回添加的元素个数
  • LPUSH/RLPUSH list val1 val2 val3 … – 返回操作后的LIST的长度

提供批量命令的效果是显而易见的,网络往返的时间被大大节约了,在最理想的网络情况下,作者的测试结果是一次性写入200w个元素,仅仅花费了1.28秒,每秒超过100w元素的写入!

为何不为所有写入命令都加上批量功能呢?作者解释说,由于很多命令在返回值上需要携带信息,如果改成批量的,无法批量返回信息内容。不过相信上面的改进已经可以让很多应用场景得到大大改进了。

 

4. 改用jemalloc的内存分配模式

 

Redis长期以来的思想就是尽量不产生外部依赖,比如网络事件库没有用传统的libevent库,而是自己单独抽离出几个文件组成的更简单且性能更高的网络事件启动库,这一库目前在很多开源项目中也被采用。而此次引入jemalloc实在是由于作者认为Linux下的glibc的内存分配器实在是太烂了,无法有效地防止碎片的产生。

虽然jemalloc是外部引入,你也不需要在安装Redis时先安装一堆东西,因为它已经包含在Redis源码里了,你还是像往常一样直接Make编译即可,还是那么方便贴心。

 

5. 减少 copy-on-write 使用

 

Redis的RDB文件持久化和AOF日志写入,都是通过调用fork()方法产生子进程来做的。由于主进程还是继续处理请求,当有数据写操作导致数据内容发生变化时,原来的内存段会被复制一份,这就是我们熟知的copy-on-write机制。而采用这一机制的问题就是,在最坏的情况下,进行一次RDB文件写入,可能导致使用内存加倍。所以在2.4版本中,作者对这一机制的使用进行了优化,大大减少了对copy-on-write的使用。

作者还坦言,自己在2.2版本中在这方面的一些修改是有问题的,这导致了2.2版本中的许多Bug。

 

6. INFO输出内容增强

 

2.4版本的INFO内容会有较大改变,其中比较重要的有下面两个

used_memory_peak:185680824
used_memory_peak_human:177.08M

你的实际物理内存使用(RSS)和内存碎片情况通常都与最高峰内存使用相关,而这参数就是用来描述这些情况。一个是以byte为单位(185680824),一个是自动智能单位(177.08M)。

 

7. 测试框架的优化和提速

 

这一点在NoSQLFan之前的文章《Redis 测试引擎将升级提速》中有比较详细的描述。有兴趣的朋友可以查看之前的文章。

 

来源:antirez.com

 

  • 大小: 50.1 KB
来自: NoSQLFan
6
0
评论 共 2 条 请登录后发表评论
2 楼 zdyhlp 2011-08-03 14:02
Redis是个好东西,很高兴2.4快要推出了:
2.4.0 Release Candidate 5 This is the newest Redis version that will replace Redis 2.2 in a few weeks. Redis 2.4 offers a number of significant advantages over Redis 2.2, you can read about all the changes in this detailed article.
1 楼 油炸大龙虾 2011-08-03 10:13
so good!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • myeclipse的debug调试步骤总结

    环境:myeclipse6.5 tomcat6 jdk6 初次使用后总结 步骤如下: debug调试java,web项目

  • MyEclipse中使用debug调试程序

    由于在写程序时,出现错误,所以从网上搜集资料,查的,使用debug调试的方法总结如下,如果总结有错误,还望各位读者能及时指出,定会虚心接受。 1.首先在一个java文件中设断点,直接在预测出现错误的代码行点击两下...

  • MyEclipse使用debug调试程序

    第一步:选中所要调试行的最边缘部分,双击设置调试...第三步:进入Debug视图,F5是【step into】即进入本行代码中执行,F6是【step over】, 即执行本行代码,跳到下一行。 F5执行之后,在右上方【variables】区...

  • myEclipse中使用debug调试程序

    原文地址:... 2012-05-08 23:42  ... 1.首先在一个java文件中设断点,直接点两下, ...当程序走到断点处就会转到debug视图下。... 2.F5键与F6键均为单步调试,F5

  • MyEclipse中debug

    MyEclipse中进行debug调试 增加断点 进行调试的第一步就是增加断点,增加断点的方式很简单,只需要在断点停住的那行代码左侧双击即可,再次双击则断点消除。 以debug模式启动项目 调试方式 前面两步完成后,当运行...

  • Myeclipse Debug(MyEclipse 调试程序)

    MyEclipse debug 调试程序的方法

  • 怎样在myEclipse中使用debug调试程序?

    怎样在myEclipse中使用debug调试程序? 最基本的操作是: 1.首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类后--> Run 当程序走到断点处就会转到debug视图...

  • MyEclipse 如何使用断点调试

    文章目录1、在需要的代码行处打断点右键添加断点双击添加断点快捷键添加断点2、以debug模式开启服务器通过debug执行列表,选择服务器启动当前程序按右键,选择debug as,再选择服务器启动开发视图底部server列表选择...

  • MyEclipse/Eclipse中Debug调试(断点调试)

    参考地址 http://blog.csdn.net/qq_35447305/article/details/52260297 http://blog.csdn.net/u011781521/article/details/55000066 http://blog.csdn.net/tanyunlong_nice/article/details/47093935

  • myeclipse怎么使用debug调试程序?

    myeclipse怎么使用debug调试程序?myeclipse做项目的时候,必须要调试看看程序是否会出错,今天我们就来看看debug功能调试程序的过程,需要的朋友可以参考下 编写程序不可能一蹴而就任何程序无论功能点复杂与否,其...

  • myEclipse中使用debug调试程序方法

    1, 首先在一个java文件中设断点,然后运行,当程序走到断点处就会转到debug视图下,2, F5键与F6键均为单步调试,F5是step into,也就是进入本行代码中执行,F6是step over, 也就是执行本行代码,跳到下一行,3,F7是...

  • myeclipse中html调试,利用MyEclipse进行JavaScript的DeBug调试

    MyEclipse 开始支持对 JavaScript(JS) 脚本的...所以对 .js 文件的调试,只需将其引入执行页面中,即可启动DeBug功能。例如:1、rhino.js 文件内容如下:var str = "HelloWorld" ;alert(str);2、rhino.html 文件内...

  • myeclipse\eclipse怎么进入debug调试运行程序及退出窗口详细教程

    Myeclipse怎么进入debug调试运行程序,在很多时候我们运行程序会报错,错误各种各样,虽然控制台有输出,但有时候并不是那么一目了然,这时就可以通过debug调试查看运行到哪一步出错。不仅如此,我们还可以观察参数...

  • myeclipse的DEBUG调试

    myeclipse的DEBUG调试

  • 在myEclipse中使用debug调试程序?

    最基本的操作是: 1.首先在一个java文件中设断点,然后...2.F5键与F6键均为单步调试,F5是step into,也就是进入本行代码中执行,F6是step over, 也就是执行本行代码,跳到下一行, 3.F7是跳出函数 4.F8是执行

  • springboot(酒店管理系统)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! 需要加v19306446185

  • BP神经网络matlab实例.doc

    数学模型算法

  • 设计.zip

    设计.zip

  • 基于 Spring Cloud 组件构建的分布式服务架构

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程

  • 【微信小程序毕业设计】书店系统开发项目(源码+演示视频+说明).rar

    【微信小程序毕业设计】书店系统开发项目(源码+演示视频+说明).rar 【项目技术】 微信小程序开发工具+java后端+mysql 【演示视频-编号:246】 https://pan.quark.cn/s/cb634e7c02b5 【实现功能】 用户信息管理,图书信息管理,图书类型管理,图书留言管理,论坛信息管理等

Global site tag (gtag.js) - Google Analytics