Redis 6.2 RC发布新特性一览

vincent0809
发布于 2022-4-15 11:40
浏览
0收藏

一、Redis 6.2 RC1发布


2020年12月14日,Redis发布了6.2的第一个RC版本,是Redis作者antirez”辞职“后,由Redis核心团队发布的第一个版本。该版本没有太多惊艳新的特性(比如Redis 6.0提供了多线程、ACL、RESP3等等),但提供了很多新的命令和功能改进,其中比较重要的有几个:

 

 •  一些新的命令:SMISMEMBER、ZMSCORE、LMOVE、GEOSEARCH(支持按照矩形搜索,阿里云团队开发)等

 

 •  rehash可能造成的evict问题(小概率问题,但确实比较难查,在一个Redis最好存多少key文章中有提到)

 

 •  在info里加了一些新的东西:比如读写量(方便计算读写比)、将main thread和io thread的cpu单独计算、total_forks

 

 •  在一些新的硬件架构做了很多优化:ARM、树莓派

 

 •  去掉了Redis6对高版本GCC的要求

 

 •  当然也修复了一些bug


二、新的命令


 •  添加SMISMEMBER命令:原子批量的sismember(#7615)
 •  添加ZMSCORE命令:原子批量zscore(#7593)
 •  添加LMOVE和BLMOVE命令:用来代替RPOPLPUSH(6.2后被废弃)(#6929)
 •  添加RESET命令可以重置客户端连接状态(#7982)
 •  添加COPY命令:复制key(#7953)
 •  添加ZDIFF和ZDIFFSTORE命令(#7961)
 •  添加ZINTER和ZUNION命令(#7794)
 •  添加GEOSEARCH/GEOSEARCHSTORE命令:GEO可以基于方形搜索(之前是基于半径)(#8094) 
 •  将GET参数添加到SET命令,以获得更强大的GETSET(GETSET在6.2后被废弃)(#7852)
 •  向XPENDING、X[REV]RANGE添加专有范围查询(#8130 #8072)
 •  为ZADD添加GT和LT选项以进行条件分数更新(#7818)
 •  client info和list接口支持指定ids(#8113)
 •  在XPENDING命令中添加IDLE参数(#7972)
 •  将本地地址添加到CLIENT LIST和CLIENT KILL过滤器。(#7913)
 •  将NOMKSTREAM选项添加到XADD命令(#7910)
 •  将命令command添加到Sentinel(#7940)
 •  添加SENTINEL MYID子命令(#7858)


三、新的功能


1.server端新的功能:


 •  优化dump逻辑,防止有可能造成的crash(#7807)
 •  ACL支持:pub/sub(#7993)
 •  ACL支持:sentinel(#7888)
 •  支持同时从stdin和文件中获取配置,避免将机密信息存储在磁盘上(#7893)


2.客户端工具中的新功能:


 •  redis-cli RESP3推送支持(#7609)
 •  redis-cli 增加askpass和cluster-from-askpass选项(#7994)
 •  redis-cli 能够提供用户名和密码的URI(#8048)
 •  redis-cli / redis-benchmark允许指定首选密码/密码套件(#8005)
 •  redis-cli 增加-e选项可在命令执行失败时与代码一起退出(#8136)


四、改进


1. 命令的行为更改:


 •  EXISTS命令不会更改LRU(#8016)
 •  object命令不触发过期(LOOKUP_NOTOUCH|LOOKUP_NONOTIFY)(#8016)
 •  改善SELECT和MOVE的数据库ID范围检查(#8085)
 •  修改AUTH/HELLO错误消息文本(#7648)
 •  BITOPS长度限制定义为一个宏(proto_max_bulk_len)(#8096)
 •  如果Redis超出内存限制,则GEORADIUS[BYMEMBER]可以返回 -OOM错误(#8107)


2.其他的行为更改:


 •  (可选)如果请求的绑定地址不可用,则默认启动失败(#7936)
 •  解决rehash在大量key-value下内存增加导致的数据剔除(#7954)
 •  CONFIG REWRITE变为原子且更安全的,但需要对配置文件的文件夹(#7824,#8051)具有写访问权
 •  使用新的增量逐出机制,可减少逐出峰值的延迟:详见maxmemory-eviction-tenacity配置(#7653)
 •  使用命令行参数启动Redis时,不重置save所保存的配置。(#7092)
 •  在加载期间更新INFO的内存指标(#7690)
 •  启用“supervised”配置时,它的优先级高于“daemonize”。(#8036)
 •  在SIGABRT上添加了崩溃日志报告,而不是退出(#8004)
 •  禁用THP(大内存页),如果启用的话(#7381)


3.info字段改进


 •  info中添加无盘复制进度信息(#7981)
 •  将主线程cpu时间添加到INFO字段。(#8132)
 •  将total_forks添加到INFO STATS字段(#8155)
 •  将maxclients和cluster_connections添加到INFO CLIENTS字段(#7979)
 •  在客户端列表中添加跟踪bcast标志和客户端重定向标志(#7995)
 •  修复 INFO client_recent_max_input_buffer字段中的相关问题(#8065,参见#7874)
 •  添加total_reads_processed和total_writes_processed方便计算读写比


4. 平台/工具链支持相关的改进:


+(可选)使用 H/W Monotonic clock(硬件单调时钟)进行更快的时间采样,默认情况不是该时钟(#7644)

 •  删除对C11和_Atomic支持的编译器的要求,可以在老版本系统上更轻松的编译和调试(#7707)
 •  修正了崩溃日志在ARM上的输出。(#8020)
 •  修复在树莓派上编译的bug。(#8095)
 •  支持在Haiku操作系统上设置进程标题。(#8060)
 •  支持DragonFlyBSD RSS内存采样。(#8023)


5. 新的配置选项:
 •  启用标准openssl.cnf配置OpenSSL(#8143)
 •  oom-score-adj-values现在可以接受绝对值(相对值除外)(#8046)
 •  TLS:添加其他客户端证书支持。(#8076)


6.模块API更改:
 •  添加CTX_FLAGS_DENY_BLOCKING作为统一的方式来了解是否允许阻塞(#8025)
 •  为惰性删除及其代价计算函数添加数据类型回调(#7912)
 •  为COPY命令添加数据类型回调(#8112)
 •  添加回调函数以进行碎片整理。(#8149)
 •  为repl-diskless-load swapdb添加模块事件(#8153)


7.模块相关bug:
 •  移动了RMAPI_FUNC_SUPPORTED使其可用(#8037)
 •  提高计时器精度(#7987)
 •  在RM_CreateStringPrintf的结果中允许出现'\0'(#6260)


8.其他改进:
 •  在Redis基准测试中,增加TLS支持(#7959)
 •  加速无盘主连接和常规重新连接(#6271)
 •  在block状态/loading状态时运行主动碎片整理(#7726)
 •  性能和内存报告改进——sds控制其自身碎片(#7875)
 •  加速群集故障转移(#7948)


五、Bug修复


 •  Handle output buffer limits for module blocked clients (#8141) Could result in a module sending reply to a blocked client to go beyond the limit.
 •  Fix setproctitle related crashes. (#8150, #8088) Caused various crashes on startup, mainly on Apple M1 chips or under instrumentation.
 •  A module doing RM_Call could cause replicas to get nested MULTI (#8097).
 •  Backup/restore cluster mode keys to slots map for repl-diskless-load=swapdb (#8108) In cluster mode with repl-diskless-load, when loading failed, slot map wouldn't have been restored.
 •  Fix oom-score-adj-values range, and bug when used in config file (#8046) Enabling setting this in the config file in a line after enabling it, would have been buggy.
 •  Reset average ttl when empty databases (#8106) Just causing misleading metric in INFO
 •  Disable rehash when Redis has child process (#8007) This could have caused excessive CoW during BGSAVE, replication or AOFRW.
 •  Further improved ACL algorithm for picking categories (#7966) Output of ACL GETUSER is now more similar to the one provided by ACL SETUSER.
 •  Fix bug with module GIL being released prematurely (#8061) Could in theory (and rarely) cause multi-threaded modules to corrupt memory.
 •  Fix cluster redirect for module command with no firstkey. (#7539)
 •  Reduce effect of client tracking causing feedback loop in key eviction (#8100)
 •  Kill disk-based fork child when all replicas drop and 'save' is not enabled (#7819)
 •  Rewritten commands (modified for propagation) are logged as their original command (#8006)
 •  Fix cluster access to unaligned memory (SIGBUS on old ARM) #7958
 •  If diskless repl child is killed, make sure to reap the child pid (#7742)
 •  Broadcast a PONG message when slot's migration is over, may reduce MOVED responses (#7571)

 

六、升级


Redis 6.2主要是6.0的严格超集,对于使用者来说,从6.0升级到6.2没什么太大问题。对于运维人员来说,Redis6.2增加了很多新的监控信息,对做了一些运维的优化,而且对于编译环境的要求降低了,使得其易用性和可维护性提高。同时修复了一些已知的问题,并且没有对代码进行大范围的改进,对于稳定性上有一定的提高。

 

我个人的经验:没太多想要的特性,不要着急升级;没太紧急的bug,不要着急升级;新的Redis团队的代码质量需要经过考验,不要着急升级,至少等release几个小版本后.

 

广告:

 

职位:Redis内核开发工程师、开发运维工程师公司:快手(北京)

薪资:30~60K(16薪)+ 期权

联系人:付磊(微信 carlosfu)

关键::百万级Redis实例Paas平台、异地多活开发、冷热存储开发、代理中间件开发、

 

职位描述


1.负责亿万级Cache存储集群,支撑核心业务。
2.负责Cache异地多活的设计、研发等工作。
3.深入理解业务场景的存储需求,与业务合作寻找最合适的存储方案。
4.探索运维自动化和智能化技术和方向。


任职要求


1.计算机或相关专业本科及以上学历-熟练使用C、C++、Java开发语言优先,具备良好的编程基础,对工程质量有很高的自我要求。
2.参与过大型异地多活系统的设计、研发工作优先。
3.熟悉Redis、Memcached、RocksDB、其他KV存储一种,开源社区活跃者或贡献者优先。
4.具备较强的学习能力和逻辑思维,追求极致。

5.良好的沟通、团队协作能力,强烈的责任心,进取心、优秀的执行能力。

 

 

文章转自公众号:Redis开发运维实战

分类
标签
收藏
回复
举报
回复
    相关推荐