阐明:本文依据Redis 7 RC2 的release note 整顿并翻译
近日,Redis 开源社区公布了7.0的两个预览版。在这两个预览版中,有很多Redis 7.0中新减少的个性,新减少的命令或已有命令的新加参数,一些性能上的优化和进步,还有一些API的扭转,并且修复了以前版本中的一些bug,上面让咱们具体来看一下这些方面的内容。
Redis 7.0 包含了以下一些重要的变动:
- 将AOF文件的存储形式改为在一个文件夹下存储多个文件。
- 将长久化文件RDB的版本升级为10,与之前的RDB文件版本不再兼容。
- 在读取老的RDB文件格式的时候将ziplist转换为listpack,这种转换产生于两种状况之下:从磁盘读取文件或者从一个主节点进行复制文件的时候。
- 在redis.conf配置文件中,protected-mode 默认更改为yes,只有当你心愿你的客户端在没有受权的状况下能够连贯到Redis server的时候能够将protected-mode设置为no。
- 在ACL中,pub/sub channel默认是被阻塞的。
- 在从节点中,TTL的工夫标识的是相对工夫,不再是绝对工夫,从而保障了过期数据被及时删除。
- 不再反对 gopher协定。
- 当在配置文件中设置replica-serve-stale-data=no, 当主节点不再提供服务时,PING命令得不到返回值。
Redis 7.0 新个性其中的几个例子:
- RedisFunctions:一种新的形式用于Redis server端脚本,它不同于以前版本反对的Lua脚本, Redis Functions可反对长久化,可复制,并且在节点重启之后能够间接从server端读取。 咱们会在后续的博客中具体介绍Redis Functions的应用。 如果当初大家就想晓得更多详情,能够参考链接https://redis.io/topics/funct...
- 集群反对显示主机名,而不仅仅显示ip地址。
- 应用多个AOF文件升高了AOF重写期间的内存应用。
- 在Lua脚本中反对了Function的标记。
- 在AOF文件中减少了数据更新工夫点的标识,使得用户能够复原某一时间点的数据。
- Lua脚本反对RESP3 版本的并且能够通过redis.REDIS_VERSION, redis.REDIS_VERSION_NUM失去Redis的版本。
- 减少了对stream consumer组滞后的追踪和报告 。
- 减少了API以便于能够在functions和Lua脚本中明确地查看ACL。
Redis 7.0 新增14个用户端命令和 15个已有命令的相干参数选项,其中包含:ZMPOP, BZMPOP,LMPOP, BLMPOP等新命令,对于EXPIRE和SET命令,新增了更多的命令参数选项。
例如,ZMPOP的格局如下: ZMPOP numkeys key [key ...] MIN|MAX [COUNT count],而BZMPOP是ZMPOP的阻塞版本。
上面是一个应用ZMPOP的例子:
redis> ZMPOP 1 notsuchkey MIN(nil)redis> ZADD myzset 1 "one" 2 "two" 3 "three"(integer) 3redis> ZMPOP 1 myzset MIN1) "myzset"2) 1) 1) "one" 2) "1"redis> ZRANGE myzset 0 -1 WITHSCORES1) "two"2) "2"3) "three"4) "3"redis> ZMPOP 1 myzset MAX 1) "myzset"2) 1) 1) "three" 2) "3"redis> ZRANGE myzset 0 -1 WITHSCORES1) "two"2) "2"
Redis 7.0 新增10个治理和监控相干的命令及其相干参数选项,其中包含:COMMAND LIST,COMMAND INFO,CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE等。
Redis 7.0 新增配置选项:
- maxmemory-clients 能够限定所有客户端应用的内存总和的最大值。
- cluster-port用户能够自定义集群的绑定端口。
- 对于Config Set 和Get命令,反对在一次调用过程中传递多个配置参数。例如,当初咱们能够在执行一次Config Set命令中更改多个参数: config set maxmemory 10000001 maxmemory-clients 50% port 26381。
- 还有shutdown-timeout,latency-tracking,cluster-link-sendbuf-limit等相干配置选项。
Redis 7.0 在以下方面有了显著的性能晋升:
- 数据类型Hash,List, Zset的底层数据结构用listpack替换了ziplist
- 列表(List)的数据类型能够存储超过4GB的单个元素
- 升高了copy-on-write期间的内存应用
- 在应用大量散列(Hash)或者有序汇合(Zset)时节俭了大量的内存
- 在集群模式下,节俭了大量的内存并且升高了零碎整体的延迟时间
- 在集群中,当一个主节点重启之后,从节点不再须要做齐全同步,只须要做局部同步即可
- 当Redis启动时,总是建设一个AOF文件用于长久化
- 升高了长期没有响应客户(idle, stale client)的内存应用
- 升高了在客户回复数据包中的对于写的零碎调用次数,也同时升高了TCP packet的数目
Radis 7.0 还对模块(Module)的API进行了局部批改如下:
- 新增了对RESP3类型的应答的API反对
- 新增了在RM_Call对RESP3回复音讯的解析的API反对
- 减少了对ACL进行验证的反对
- 还减少API:RM_CreateSubcommand,RM_KeyExists,RM_TrimStringAllocation, RM_SetCommandInfo等
当然,Redis 7.0 前两个预览版中不止以上提到的内容,还有更多的新个性和新性能咱们会在后续的博客中持续为大家介绍。