龙空技术网

Redis 6.2.1版本新特性一览

IT运维笔记 1112

前言:

今天姐妹们对“linux diskless”大致比较关怀,小伙伴们都想要学习一些“linux diskless”的相关文章。那么小编也在网络上网罗了一些对于“linux diskless””的相关知识,希望我们能喜欢,姐妹们一起来了解一下吧!

一、前言

Redis 6.2 版本是在新的项目治理模型下核心团队管理的第一个重要的Redis版本。Redis 6.2 包括许多新命令和改进功能,但没有重大功能。它主要使Redis更加完整,并解决了已请求的问题。个人觉得最重要的是去掉了版本在使用源码编译安装时对高版本GCC的要求(Redis6.0版本需要GCC 5.3以上版本)。安装部署请参考: (无需先升级GCC编译器版本)

二、新命令/参数:

◆ 添加SMISMEMBER命令来检查多个成员(#7615)

◆ 添加ZMSCORE命令以返回分数数组(#7593)

◆ 添加可任意弹出和推入的LMOVE和BLMOVE命令(#6929)

◆ 添加RESET命令以重置客户端连接状态(#7982)

◆ 添加复制密钥的COPY命令(#7953)

◆ 添加ZDIFF和ZDIFFSTORE命令(#7961)

◆ 添加ZINTER和ZUNION命令(#7794)

◆ 为边界框空间查询添加GEOSEARCH / GEOSEARCHSTORE命令(#8094)

◆ 将GET参数添加到SET命令中,以获得更强大的GETSET(#7852)

◆ 向XPENDING添加专有范围查询(#8130)

◆ 将互斥范围查询添加到X [REV] RANGE(#8072)

◆ 为ZADD添加GT和LT选项以进行条件分数更新(#7818)

◆ 为特定ID添加客户端信息和客户端列表(#8113)

◆ 将IDLE参数添加到XPENDING命令(#7972)

◆ 将本地地址添加到CLIENT LIST和CLIENT KILL过滤器。(#7913)

◆ 将NOMKSTREAM选项添加到XADD命令(#7910)

◆ 将命令添加到Sentinel(#7940)

◆ 添加SENTINEL MYID子命令(#7858)

◆ 将REV,BYLEX和BYSCORE参数添加到ZRANGE和ZRANGESTORE命令(#7844)

◆ 添加XAUTOCLAIM命令(#7973)

◆ 将MINID调整策略和LIMIT参数添加到XADD和XTRIM(#8169)

◆ 将ANY参数添加到GEOSEARCH和GEORADIUS(#8259)

◆ 将CH,NX,XX参数添加到GEOADD(#8227)

◆ 将COUNT参数添加到LPOP和RPOP(#8179)

◆ 将WRITE参数添加到CLIENT PAUSE中已专门暂停写入命令(#8170)

◆ 将HELLO的proto-ver参数更改为可选(#7377)

◆ 添加CLIENT TRACKINGINFO子命令(#7309)

◆ 添加HRANDFIELD和ZRANDMEMBER命令(#8297)

◆ 添加FAILOVER命令(#8315)

◆ 添加GETEX,GETDEL命令(#8327)

◆ 将PXAT / EXAT参数添加到SET命令(#8327)

◆ 将SYNC arg添加到FLUSHALL和FLUSHDB,并将ASYNC/SYNC arg添加到SCRIPT FLUSH(#8258)

三、新的功能:

Server服务器端新功能:

◆ 转储有效负载清理:防止损坏的有效负载导致崩溃,具有用于启用完整O(N)验证的标志(默认情况下处于禁用状态)。(#7807)

◆ 发布/订阅通道的ACL模式(#7993)

◆ 支持Sentinel模式的ACL(#7888)

◆ 支持同时从stdin和文件中获取配置,避免在磁盘上存储机密信息。(#7893)

CLI(客户端)工具的新功能:

◆ redis-cli RESP3推送支持(#7609)

◆ 需要身份验证的redis-cli集群导入支持源和目标(#7994)

◆ redis-cli 能够提供用户名和密码的URI(#8048)

◆ redis-cli / redis-benchmark允许指定首选密码/密码套件(#8005)

◆ redis-cli 增加 -e 选项可在命令执行失败时与代码一起退出(#8136)

四、改进

1.命令行为更改:

◆ EXISTS不应更改LRU(#8016)。在Redis 5.0和6.0中,它会碰到密钥的LRU / LFU。

◆ 对象不应显示逻辑上已过期的密钥(#8016)。现在将表现相同的TYPE或任何其他非DEBUG命令。

◆ 改善SELECT和MOVE的数据库ID范围检查(#8085)。在错误的数据库索引上更改错误消息文本。

◆ 修改AUTH / HELLO错误消息(#7648)。当找不到或禁用用户时,更改错误消息文本。

◆ BITOPS长度限制为proto_max_bulk_len,而不是512MB(#8096)。现在可以像在SETRANGE和APPEND中一样配置该限制。

◆ 如果Redis超出内存限制(#8107),则GEORADIUS [BYMEMBER]可能因-OOM而失败

◆ 如果给定重叠的BCAST前缀,则CLIENT TRACKING会产生错误(#8176)

◆ SWAPDB使WATCHed键失效(#8239)

◆ 在可写副本上使用时,SORT命令的行为有所不同(#8283)

◆ SRANDMEMBER使用RESP3数组类型而不是set类型(#8504)

◆ EXPIRE,EXPIEAT,SETEX,GETEX:提供的到期时间溢出时返回错误(#8287)

2.其他行为更改:

◆ (可选)如果请求的绑定地址不可用,则默认启动失败(#7936)。如果需要Redis成功启动,即使其中一个绑定地址不可用,则需要调整新配置。

◆ 限制主数据库字典的扩展,以防止密钥逐出(#7954)过去,大词典的重新哈希处理可能会导致大量数据驱逐。现在,此重新哈希处理已延迟(达到上限),这可能会导致性能下降哈希冲突造成的损失。

◆ CONFIG REWRITE是原子的和更安全的,但是需要对配置文件的文件夹(#7824,#8051)具有写访问权。此更改已在6.0.9中提供,但在发行版中未提供笔记。

◆ 一种新的增量逐出机制,可减少逐出峰值的延迟(#7653)。在病理情况下,这可能会导致记忆不受控制地增长,并可能需要具体调整。

◆ 使用命令行参数启动Redis时,不重置“保存”配置(#7092)。如果您提供的命令行参数没有“保存”并依靠它被禁用,现在将启用默认的“保存”配置。

◆ 在加载期间更新INFO的内存指标(#7690)

◆ 启用“监督”配置时,它优先于“守护进程”。(#8036)

◆ 断言和恐慌,打印崩溃日志而未生成SIGSEGV(#7585)

◆ 在SIGABRT上添加了崩溃日志报告,而不是静默退出(#8004)

◆ 如果启用(#7381),请禁用THP(透明大页面)。如果您故意启用了它,则需要配置Redis使其保持不变。

◆ 避免传播MULTI / EXEC用于只读事务(#8216)

◆ 从TIME,ECHO,ROLE,LASTSAVE(#8216)中删除只读标志

◆ 修复PFDEBUG的命令标志(#8222)

◆ 在FLUSHDB(#8039)之后,跟踪客户端将不再收到不必要的密钥无效消息

◆ 前哨:修复SENTINEL SET命令后对配置文件缺少的更新(#8229)

◆ 如果存在完全添加的命令,则删除ACL子命令验证。(#8483)

3.涉及兼容性的错误修复(Redis 6.0中引入的错误):

◆ 修复了Big-endian系统上的RDB CRC64校验和(#8270)。如果您使用的是big-endian,请考虑与还原,复制和持久性。

◆ 修正了Lua的地图响应中键/值的错误顺序(#8266)。如果您的脚本使用redis.setresp()或返回映射(Redis 6.0中的新增功能),请考虑其中的含义。

4.仅适用于早期版本的Redis 6.2的错误修复:

◆ 解决加载时主动碎片整理中的罕见断言(#8284,#8281)

◆ 修复了GEOSEARCH bybox(宽度和高度之间的准确性和不匹配)(#8445)

◆ 修正HRANDFIELD和ZRANDMEMBER命令中OOM出现严重错误的风险(#8429)

◆ 修复了Sentinel中重复副本的问题,由于支持主机名(#8481)

◆ 修复了Sentinel配置重写,改进了#8271(#8480)

5.Bug修复:

◆ 处理模块阻止的客户端的输出缓冲区限制(#8141)。可能导致模块向被阻止的客户端发送答复,从而超出了限制。

◆ 修复与setproctitle相关的崩溃。(#8150,#8088)。在启动时导致各种崩溃,主要是在Apple M1芯片或更低级别的芯片上仪器。

◆ 执行RM_Call的模块可能导致副本嵌套MULTI(#8097)。

◆ 将集群模式密钥备份/恢复到插槽映射以实现repl-diskless-load = swapdb(#8108)。在具有repl-diskless-load的集群模式下,加载失败时,则不会还原插槽映射。

◆ 修复oom-score-adj-values范围,并在配置文件中使用时出错(#8046)。启用后,在配置文件中的一行中启用此设置,可能会出现问题。

◆ 当数据库为空时重置平均ttl(#8106)。仅导致INFO中的误导性指标。

◆ 当Redis拥有子进程时禁用重新哈希处理(#8007)。这可能在BGSAVE,复制或AOFRW期间导致过多的CoW。

◆ 进一步改进了用于分类的ACL算法(#7966)。现在,ACL GETUSER的输出与ACL SETUSER提供的输出更加相似。

◆ 修复了GIL模块过早发布的错误(#8061)。从理论上讲(可能很少)会导致多线程模块损坏内存。

◆ 修复了没有firstkey的模块命令的集群重定向。(#7539)

◆ 减少客户端跟踪的影响,从而导致密钥驱逐中出现反馈循环(#8100)

◆ 当所有副本掉落且未启用“保存”时,杀死基于磁盘的派生子代(#7819)

◆ 重写的命令(为传播而修改)被记录为其原始命令(#8006)

◆ 修复对未对齐内存的群集访问(旧ARM上的SIGBUS)#7958

◆ 如果无盘repl子项被杀死,请确保获得子pid(#7742)

◆ 当插槽的迁移结束时广播PONG消息,可能会减少MOVED响应(#7571)

◆ 修复了从大型哈希表中选择随机元素的问题(#8133)

◆ 修复了分叉进程删除父级的pidfile(#8231)的问题

◆ 修复了启用io-threads-do-reads时崩溃的问题(#8230)

◆ 修复了执行集群备份后redis-cli崩溃的问题(#8267)

◆ 修复redis-benchmark以将IP地址用于第一个集群节点(#8154)

◆ 修复了将大于2GB的字符串保存到RDB文件中的问题(#8306)

◆ AOF:通过打开/关闭appendonly配置(#8030)从上次写入错误中恢复

◆ 当AOF fsync策略始终为“#8347”时,在出现fsync错误时退出

◆ 在测试arm64 CoW错误(#8405)时避免断言(在较早的内核上)

◆ CONFIG REWRITE应该接受umask设置(#8371)

◆ 修复了一些命令(#8367)中的firstkey,lastkey,step在COMMAND命令中的步骤

◆ 当proto-max-bulk-len设置为高时,避免32位溢出(#8522)

◆ 修复客户端跟踪跟踪redir损坏的消息中的损坏协议(#8456)

◆ 避免在INFO命令状态,错误状态,模块中使用不安全的字段名称字符(#8492)

◆ XINFO可以在CLIENT PAUSE WRITE(#8436)期间访问过期的密钥

◆ 修复REPLCONF ip地址的允许长度,由于Sentinel支持主机名(#8517)

◆ 与-a或--dbnum一起使用时,在redis-benchmark中修复了损坏的协议(#8486)

◆ 当考虑切换到新的列表包时,XADD也会计算已删除的记录(#8390)

◆ 修复带有已删除记录的流的sanitize-dump-payload(#8568)

◆ 防止将client-query-buffer-limit配置设置为小于1mb(#8557)

6.其他改进:

◆ Redis基准测试中的TLS支持(#7959)

◆ 加速无盘主连接和常规重新连接(#6271)

◆ 在阻止/加载时运行主动碎片整理(#7726)

◆ 性能和内存报告改进-sds控制其内部碎片(#7875)

◆ 加速群集故障转移。(#7948)

◆ 改善复制握手时间(#8214)

◆ 在还异步释放数据库的情况下,异步释放客户端跟踪表内存(#8039)

◆ 在某些情况下避免浪费浪费的瞬时内存分配(#8286,#5954)

◆ 通过'requirepass'和'masterauth'配置处理二进制字符串值(#8200)

◆ 一种通过复制获取RDB文件而无需过多复制缓冲区的方法(#8303)

◆ 针对大型集群优化clusterGenNodesDescription的性能(#8182)

◆ 使用COUNT(#8326)优化GEORADIUS / GEOSEARCH中的排序

◆ 在对ziplist进行编码时优化HRANDFIELD和ZRANDMEMBER案例4(#8444)

◆ 优化就地替换HSET,HINCRBY,LSET中的元素(#8493)

◆ 删除冗余列表以存储pubsub模式(#8472)

◆ 在命令行工具中添加--insecure选项(#8416)

◆ 在运行时修改端口,tls-port和绑定配置选项(#8510)

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

◆ (可选)(默认情况下不是)使用H / W单调时钟进行更快的时间采样(#7644)

◆ 删除对C11和_Atomic支持的编译器的要求(#7707)。这样可以更轻松地在较旧的系统上构建和使用Redis,并且再次编译。

◆ 修正了崩溃日志寄存器在ARM上的输出。(#8020)

◆ 树莓派修复。(#8095)

◆ 为Haiku设置进程标题支持。(#8060)

◆ DragonFlyBSD RSS内存采样支持。(#8023)

◆ 安装redis-check-rdb和redis-check-aof作为与redis-server的符号链接(#5745)

◆ 添加对ARM64 Linux内核错误的检查(#8224)。由于此问题的潜在严重性,Redis将拒绝继续运行默认情况下受影响的平台。

◆ 如果未使用jemalloc,则修复了非glibc系统上的编译错误(#8533)

◆ 改进了FreeBSD上的内存消耗和内存使用情况跟踪(#8545)

◆ 使用jemalloc修复ARM64 MacOS上的编译(#8458)

8.哨兵:

◆ 将主机名支持添加到Sentinel(#8282)

◆ 防止文件描述符泄漏到Sentinel脚本中(#8242)

◆ 修复配置文件的行顺序依赖性和配置重写顺序(#8271)

9.新的配置选项:

◆ 启用使用标准openssl.cnf配置OpenSSL(#8143)

◆ oom-score-adj-values配置现在可以采用绝对值(相对值除外)(#8046)

◆ TLS:添加其他客户端证书支持。(#8076)

◆ 请注意,上面列出的其他一些更改添加了它们的配置选项。

◆ 添加set-proc-title配置选项以禁用对进程标题的更改(#3623)

◆ 添加proc-title-template选项以控制进程标题中显示的内容(#8397)

◆ 添加lazyfree-lazy-user-flush配置选项以控制FLUSHALL,FLUSHDB和SCRIPT FLUSH(#8258)

10.特殊注意事项:

◆ 修复了关于save配置指令(#8337)的误导性描述

11.信息字段和自省更改:

◆ 添加INFO字段以跟踪无盘和基于磁盘的复制进度(#7981)

◆ 为主线程cpu时间添加INFO字段,并刮取系统时间。(#8132)

◆ 将total_forks添加到INFO STATS(#8155)

◆ 将maxclients和cluster_connections添加到INFO CLIENTS(#7979)

◆ 在客户端列表中添加跟踪bcast标志和客户端重定向(#7995)

◆ 修复了INFO client_recent_max_input_buffer包含argv数组的问题(#8065,参见#7874)

◆ 请注意,上面列出的其他一些更改添加了他们的信息字段。

◆ 将errorstats部分添加到INFO命令中(#8217)

◆ 添加失败呼叫和拒绝呼叫字段信息的commandstats部分(#8217)

◆ 连续报告子级写时复制指标(#8264)

◆ SLOWLOG和LATENCY监视器包括被阻止命令的解除阻止时间(#7491)

◆ 添加信息字段以跟踪BGSAVE,AOFOR,复制的进度(#8414)

12.模块API更改:

◆ 添加CTX_FLAGS_DENY_BLOCKING作为统一的方式来了解是否允许阻止(#8025)

◆ 添加数据类型回调以实现懒惰工作,并取消链接(#7912)

◆ 为COPY命令添加数据类型回调(#8112)

◆ 添加用于碎片整理支持的回调。(#8149)

◆ 为repl-diskless-load swapdb添加模块事件(#8153)

◆ 添加RedisModule_SendChildCOWInfo API(#8264)

◆ 添加可以复制的命令标志(#8170)

13.与模块相关的修复:

◆ 移动了RMAPI_FUNC_SUPPORTED使其可用(#8037)

◆ 提高计时器精度(#7987)

◆ 在RM_CreateStringPrintf的结果中允许'\ 0'(#6260)

◆ 为流添加模块API(#8288)

◆ 为叉子孩子的出生和终止添加事件(#8289)

◆ 添加RM_BlockedClientMeasureTime ◆ 等,以跟踪commandstats中的后台处理(#7491)

◆ 修复了v6.2中的错误,错误的值传递给了新的取消链接回调(#8381)

◆ 修复了v6.2中的错误,在键上被阻止的模块在LPUSH之类的命令上被取消阻止(#8356)

◆ RM_ZsetRem:如果为空则删除键,该错误可能会留下空的zset键(#8453)

◆ RM_HashSet:添加COUNT_ALL标志并设置errno(#8446)

◆ 用于获取客户端用户名的新模块API(#8508)

◆ 通过使用共享的可重用客户端来优化RM_Call(#8516)

◆ 通过RM_Call修复了运行CLIENT INFO的崩溃问题(#8560)

标签: #linux diskless