12月20号,Redis发布了Redis6-rc1版本,作者antirez也在自己的博客中宣布了这一消息,并对Redis6版本做了一些介绍,以下是译文。
没错,新版本的Redis已经到了候选发布状态(RC版),几个月后,你就可以在各大应用市场看到新版本的Redis了。我想这大概是迄今为止,Redis最接近“企业级”应用的一个版本了,有趣的是,在这之前我花了很长时间来理解什么是企业级应用。我认为我并不喜欢这个词,但是它还是有一些意义的。现在Redis可以说是无处不在,并且仍然能够“缩小规模”:你可以直接下载它,在30秒内完成编译,然后在不需要进行任何配置的情况下启动它。但是无处不在意味着加密和ACL之类的环境也是必须要支持的,因此Redis必须要感谢我,尽管我极力追求简单性。
有趣的是,Redis ACL虽然是以一种武断的方式进行添加,但它几乎与你在其他系统中看到的都不一样,对SSL的支持也是经过了数次迭代,以达到最终使用最有意义的想法的目的。从让核心功能尽可能简洁的角度来看,我对这些改动还是很满意的。
Redis6为我们带来的不仅仅是ACLs和SSL,据我所知,这是Redis发行的功能最多,也是参与人数最多的一个版本了。都有谁为Redis6做出了贡献呢?我生成了一个贡献者列表(我知道这个列表很烂,我只是简单生成了一下),他们至少有两个commit,并且不包括合并提交。另外,由于我不断在这里或那里修复许多小东西,因此我的提交次数可能会远超他人。
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 喜欢兰花山丘感谢上面各位的贡献,这是一次很棒的团队合作。
下面的列表是新功能列表:
很多新的模块API
更好的过期周期
SSL
ACLs
RESP3
客户端缓存
线程I/O
副本上的无盘复制
Redis-benchmark支持集群+Redis-cli的改进
系统支持重写
Redis Cluster代理与Redis6一起发布(不同仓库)
Redis 6发布了Disque模块(不同仓库)
如你所见,有很多比较大的改动,接下来我会选择其中几个进行介绍。
RESP310年之后,我们需要一个新的协议,我在这篇博客中进行了广泛的讨论:,但我随后改变了主意,所以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开发过程的改变。
客户端缓存关于客户端缓存,我写了一篇博客(),然而我认为这是Redis6最不成熟的功能。没错,服务器可以协助你在客户端缓存,这看起来很酷,但我想要在Redis6 GA版本出来之前对这个功能进行进一步优化。尤其是增加一种新的模式,在这个模式下,服务器不维护客户端的状态或者尽量少的维护客户端的状态,更多使用消息进行交互。而且,现在无法将某些“cache slots”的过期消息合并成一个。这是一个不错的想法,我们将在一月份着重做这部分功能。
Disque成为一个模块最终,我做到了(https://github.com/antirez/disque-module),我对这个结果非常满意。