Redis 6.2 RC发布新特性一览
一、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开发运维实战