
12月20号,Redis发布了Redis6-rc1版本,做者antirez也在本身的博客中宣布了这一消息,并对Redis6版本作了一些介绍,如下是译文。
css
没错,新版本的Redis已经到了候选发布状态(RC版),几个月后,你就能够在各大应用市场看到新版本的Redis了。我想这大概是迄今为止,Redis最接近“企业级”应用的一个版本了,有趣的是,在这以前我花了很长时间来理解什么是企业级应用。我认为我并不喜欢这个词,可是它仍是有一些意义的。如今Redis能够说是无处不在,而且仍然可以“缩小规模”:你能够直接下载它,在30秒内完成编译,而后在不须要进行任何配置的状况下启动它。可是无处不在乎味着加密和ACL之类的环境也是必需要支持的,所以Redis必需要感谢我,尽管我极力追求简单性。前端
有趣的是,Redis ACL虽然是以一种武断的方式进行添加,但它几乎与你在其余系统中看到的都不同,对SSL的支持也是通过了数次迭代,以达到最终使用最有意义的想法的目的。从让核心功能尽量简洁的角度来看,我对这些改动仍是很满意的。git
Redis6为咱们带来的不只仅是ACLs和SSL,据我所知,这是Redis发行的功能最多,也是参与人数最多的一个版本了。都有谁为Redis6作出了贡献呢?我生成了一个贡献者列表(我知道这个列表很烂,我只是简单生成了一下),他们至少有两个commit,而且不包括合并提交。另外,因为我不断在这里或那里修复许多小东西,所以个人提交次数可能会远超他人。github
685 antirez
81 zhaozhao.zz
76 Oran Agra
51 artix
28 Madelyn Olson
27 Yossi Gottlieb
15 David Carlier
14 Guy Benoish
14 Guy Korland
13 Itamar Haber
9 Angus Pearson
8 WuYunlong
8 yongman
7 vattezhang
7 Chris Lamb
5 Dvir Volk
5 meir@redislabs.com
5 chendianqiang
5 John Sully
4 dejun.xdj
4 Daniel Dai
4 Johannes Truschnigg
4 swilly22
3 Bruce Merry
3 filipecosta90
3 youjiali1995
2 James Rouzier
2 Andrey Bugaevskiy
2 Brad Solomon
2 Hamid Alaei
2 Michael Chaten
2 Steve Webster
2 Wander Hillen
2 Weiliang Li
2 Yuan Zhou
2 charsyam
2 hujie
2 jem
2 shenlongxing
2 valentino
2 zhudacai 00228490
2 喜欢兰花山丘
感谢上面各位的贡献,这是一次很棒的团队合做。web
下面的列表是新功能列表:redis
不少新的模块API算法
更好的过时周期数组
SSL缓存
ACLs服务器
RESP3
客户端缓存
线程I/O
副本上的无盘复制
Redis-benchmark支持集群+Redis-cli的改进
系统支持重写
Redis Cluster代理与Redis6一块儿发布(不一样仓库)
Redis 6发布了Disque模块(不一样仓库)
如你所见,有不少比较大的改动,接下来我会选择其中几个进行介绍。
RESP3
10年以后,咱们须要一个新的协议,我在这篇博客中进行了普遍的讨论:http://antirez.com/news/125,但我随后改变了主意,因此RESP3在Redis6中是“选择加入”。链接最开始是RESP2模式,只有当你使用新的HELLO命令握手时,你才会进入新的协议模式。
咱们为何须要一个新的协议呢?由于旧的语义不够清晰。RESP3中还有一些其余功能,但主要思想是可以直接从Redis返回复杂数据类型,而客户端没必要知道要转换为哪一种类型的数组,或者返回的数字是否可以转换成布尔值等等。
因为RESP3不是仅有的协议,因此它的使用速度比预期要慢一些,但这也许不是一件坏事,由于这样咱们就有足够的时间来进行适应和调整。
ACLs
对Redis ACLs最好对介绍就是ACL文档自己(https://redis.io/topics/acl),即便它可能须要进行一些更新以匹配最近对修改。我在这里更想讨论一下使用它的动机。Redis须要ACLs是由于人们须要在更普遍的使用ACLs,以达到更好的控制客户端能够作的某些操做。另外一个增长ACLs的主要缘由是进行隔离,以保护数据免受应用程序错误的侵害。若是你的工做节点只能作BRPOPLPUSH操做,那么新的开发人员使用FLUSHALL的机会就比较少,也可以下降生产环境执行FLUSHALL的可能性。
在Redis中ACLs的操做都是免费的,由于若是你不用它们,性能上就不会受影响,毕竟这部分开销没法衡量。我想这是最好的处理方法了,值得一提的是,咱们如今为ACL提供了Redis模块接口,所以你能够编写自定义身份验证方法。
SSL
如今是2019年,立刻要到2020年了,所以有一些新的规则。惟一的问题就是如何正确执行,正确执行的前提是错误执行并理解其局限性,而后对Redis链接进行抽象以正确执行。这项工做是在彻底没有个人帮助下进行的,这也体现了Redis开发过程的改变。
客户端缓存
关于客户端缓存,我写了一篇博客(http://antirez.com/news/130),然而我认为这是Redis6最不成熟的功能。没错,服务器能够协助你在客户端缓存,这看起来很酷,但我想要在Redis6 GA版本出来以前对这个功能进行进一步优化。尤为是增长一种新的模式,在这个模式下,服务器不维护客户端的状态或者尽可能少的维护客户端的状态,更多使用消息进行交互。并且,如今没法将某些“cache slots”的过时消息合并成一个。这是一个不错的想法,咱们将在一月份着重作这部分功能。
Disque成为一个模块
最终,我作到了(https://github.com/antirez/disque-module),我对这个结果很是满意。
Disque做为一个模块确实显示的Redis模块系统的强大。集群消息总线API,可以阻止和恢复客户端,计时器,模块私有数据的AOF和RDB控制。若是你还不知道什么是Disque,能够去看一下这个仓库的README。
集群代理
个人同事Fabio在这个工做中花费了几个月的时间:https://github.com/artix75/redis-cluster-proxy
我想看到这个功能已经不少年了,当主题是Redis集群支持时,客户端的须要进行的操做老是很分散,如今咱们有了代理(还在进行中),就能够作不少有趣的事情了。最主要的功能是为客户端抽象Redis集群,就像它们正在与单个实例通讯同样。另外一个功能就是至少在简单且客户端仅使用简单命令和功能时执行多路复用。当要阻止或执行事务时,代理为客户端分配一组不一样的链接。代理也是彻底线程级的,因此让大部分CPU时间花在I/O上,这是一种最大化CPU使用率的好方法。你能够查看README文件,而后试一试这个功能。
Modules
Redis6的模块API彻底是一个新的等级了。这是Redis发展最快的部分之一,由于咱们从最开始就使用模块系统来开发很是复杂的东西,而不只仅是琐碎的示例。前端时间,我启动了Disque端口,这也促使我为模块系统带来新功能。如今,你能够把Redis当作一个框架,能够讲系统做为模块进行编写,避免从头造轮子,同时也能够得到BSD许可,Redis其实是一个能够用来编写系统的开放平台。
内部
Redis内部有很是多的优化:复制命令的方式发生了很大变化,过时使用了另外一种算法,该算法更快且缓存更明显。
Status和ETA
如今咱们已经有了RC1,我但愿在3月末,最晚5月,你就能够看到GA版本准备就绪。
如今,Redis6绝对是可测试的,而且遇到错误的机会很小。但它包含了大量的代码更改,而且新功能由新的代码组成,也从没有人在生产环境中运行过这些代码。因此若是你找到了bug,请以最好的方式描述一下发生的状况并报告给咱们。
感谢全部人为该版本作出贡献的人和在接下来几个月中帮助咱们维护它处于稳定状态的人。
啊,我差点忘了,这是第6版的LOLWUT命令交互图:
每次运行都会随机生成不一样的景观。
博客原文地址
http://antirez.com/news/131
译者注
正如做者所说,Redis6带来了不少新的功能。刚发布的版本确定不能拿到线上去玩,可是本身折腾一下,提早感觉一下也不错。特别是RESP3和客户端缓存都是我比较期待的。另外还有新的过时算法,这个以前没怎么据说,也值得研究一下。不说了,我先下为敬。
本文分享自微信公众号 - 代码洁癖患者(Jackeyzhe2018)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。