新命令/参数:
- 添加SMISMEMBER命令以检查多个成员 (#7615)
- 添加ZMSCORE命令以返回分数数组 (#7593)
- 添加LMOVE和BLMOVE命令以任意弹出和推入 (#6929)
- 添加RESET命令以重置客户端连接状态 (#7982)
- 添加COPY命令以复制键 (#7953)
- 添加ZDIFF和ZDIFFSTORE命令 (#7961)
- 添加ZINTER和ZUNION命令 (#7794)
- 添加GEOSEARCH/GEOSEARCHSTORE命令用于边界框空间查询 (#8094)
- 向SET命令添加GET参数,以实现更强大的GETSET (#7852)
- 向XPENDING命令添加独家范围查询 (#8130)
- 向X[REV]RANGE命令添加独家范围查询 (#8072)
- 向ZADD添加GT和LT选项以进行条件得分更新 (#7818)
- 添加CLIENT INFO和CLIENT LIST以获取特定ID的信息 (#8113)
- 向XPENDING命令添加IDLE参数 (#7972)
- 向CLIENT LIST添加本地地址及CLIENT KILL过滤器 (#7913)
- 向XADD命令添加NOMKSTREAM选项 (#7910)
- 向Sentinel添加命令 introspection (#7940)
- 添加SENTINEL MYID子命令 (#7858)
新特性:
- 垃圾数据清理:防止损坏的payload导致崩溃 (#7807),具有启用完整O(N)验证的标志(默认禁用)。
- ACL模式的Pub/Sub通道 (#7993)
- 支持Sentinel模式下的ACL (#78888)
- 同时从stdin和文件获取配置的支持 (#7893)
允许避免在磁盘上存储密钥。
CLI工具的新特性:
- redis-cli支持RESP3推送 (#7609)
- redis-cli集群导入支持需要认证的源和目标 (#7994)
- redis-cli URI能提供用户名以及密码 (#8048)
- redis-cli/redis-benchmark允许指定首选的加密套件/密码组 (#8005)
- redis-cli添加-e选项,当命令执行失败时退出带错误码 (#8136)
命令行为变化:
- EXISTS不应改变LRU (#8016)
在Redis 5.0和6.0中,它会触碰键的LRU/LFU。 - OBJECT不应揭示逻辑过期的键 (#8016)
将表现得像TYPE或其他非DEBUG命令一样。 - 改善SELECT和MOVE命令的数据库索引范围检查 (#8085)
更改了错误消息文本。 - 修改AUTH / HELLO错误消息 (#7648)
更改了用户未找到或被禁用时的错误消息。 - BITOPS长度限制为proto_max_bulk_len而非512MB (#8096)
限制现在像SETRANGE和APPEND一样可配置。 - GEORADIUS[BYMEMBER]在Redis超过内存限制时可能会因-OOM失败 (#8107)
其他行为变化:
- 可选(默认)如果请求的绑定地址不可用则启动失败 (#7936)
如果依赖于即使一个绑定地址不可用Redis也能成功启动,则需要调整新配置。 - 限制主数据库字典扩展以防键驱逐 (#7954)
过去大规模重新散列可能导致大量数据驱逐。现在这个重新散列会被延迟(到一定限制),可能会因为哈希冲突导致性能损失。 - CONFIG REWRITE原子化且更安全,但需要对配置文件夹的写访问权限 (#7824, #8051)
此变更已在6.0.9中存在,但在发行说明中遗漏。 - 新的增量驱逐机制减少驱逐尖峰时延时 (#7653)
在病态情况下这可能导致内存无控制增长,可能需要特定调整。 - 不在Redis使用命令行参数启动时重置"save"配置 (#7092)
提供命令行参数而不提供"save"并指望其被禁用,现在默认"save"配置会生效。 - 加载时更新INFO中的内存指标 (#7690)
- 当"supervised"配置启用时,它优先于"daemonize" (#8036)
- 断言和panic,打印崩溃日志而不生成SIGSEGV (#7585)
- 添加SIGABRT时的崩溃日志报告,而非静默退出 (#8004)
- 如果启用THP(透明大页)则禁用它 (#7381)
如果故意启用,你需要配置Redis以保持它。
漏洞修复:
- 处理模块阻塞客户端的输出缓冲区限制 (#8141)
可能导致模块向阻塞客户端发送响应超出限制。 - 修复setproctitle相关崩溃 (#8150, #8088)
导致各种启动崩溃,主要在Apple M1芯片或在仪器下。 - 模块使用RM_Call可能导致副本嵌套MULTI (#8097)
- 备份/恢复集群模式键到插槽映射以备用于repl-diskless-load=swapdb (#8108)
集群集模式下,使用repl-diskless-load加载失败时,插槽映射不会恢复。 - 修复oom-score-adj-values范围,并在配置文件中使用的bug (#8046)
在配置文件中启用后再次启用它,会有bug。 - 重置空数据库的平均ttl (#8106)
仅导致INFO中的误导性指标 - Redis有子进程时禁用重新散列 (#8007)
在BGSAVE、复制或AOFRW期间可能导致过度CoW。 - 进一步改进ACL算法选择类别 (#7966)
ACL GETUSER的输出现在与ACL SETUSER提供的更相似。 - 修复模块GIL过早释放导致的bug (#8061)
理论上(很少)会导致多线程模块破坏内存。 - 修复集群对没有firstkey的模块命令重定向 (#7539)
- 减少客户端跟踪导致的键驱逐反馈循环影响 (#8100)
- 当所有副本断开且’save’未启用时杀死基于磁盘的fork子进程 (#7819)
- 重写(传播时修改)命令记录为其原始命令 (#8006)
- 修复集群对未对齐内存访问(旧ARM上的SIGBUS) (#7958)
- 如果diskless repl子进程被杀死,确保收割子进程PID (#7742)
- 槽道迁移结束时广播PONG消息,可能减少MOVED响应 (#7571)
其他改进:
- redis-benchmark中的TLS支持 (#7959)
- 加速diskless主连接,及一般重连 (#6271)
- 加载时运行主动碎片整理 (#726)
- 性能和内存报告改进 - sds控制其内部碎片 (#7875)
- 加快集群故障转移 (#7948)
平台/工具链相关改进:
- 可选(默认不使用)使用H/W单调时钟以加快时间采样 (#7644)
- 移除C11和_Atomic支持编译器的要求 (#7707)
这将再次允许更容易在旧系统和编译器上构建和使用Redis。 - 修复ARM上的崩溃日志寄存器输出 (#8020)
- Raspberry构建修复 (#8095)
- 为Haiku设置进程标题支持 (#8060)
- DragonFlyBSD RSS内存采样支持 (#8023)
新配置选项:
- 使用标准openssl.cnf配置OpenSSL (#8143)
- oom-score-adj-values配置现在可以取绝对值(除了相对值) (#8046)
- TLS: 添加不同的客户端证书支持。 (#8076)
信息字段和introspection变化:
- 添加INFO字段追踪diskless和基于磁盘的复制进度 (#7981)
- 添加INFO字段跟踪主线程CPU时间和系统时间 (#8132)
- 添加total_forks到INFO STATS (#8155)
- 添加maxclients和cluster_connections到INFO CLIENTS (#7979)
- 添加跟踪bcast标志和客户端重定向到client list (#7995)
- 修正INFO client_recent_max_input_buffer包括argv数组 (#8065, 参见 #7874)
- 其他一些变更也添加了它们的信息字段。
模块API变更:
- 添加CTX_FLAGS_DENY_BLOCKING作为统一方式知道是否允许阻塞 (#8025)
- 添加数据类型回调为lazy free effort和unlink (#7912)
- 添加COPY命令的数据类型回调 (#8112)
- 添加defrag支持的回调 (#8149)
- 添加repl-diskless-load swapdb事件 (#8153)
模块相关修复:
- 移动RMAPI_FUNC_SUPPORTED以便使用 (#8037)
- 改进计时器精度 (#7987)
- 允许RM_CreateStringPrintf的结果中’\0’ (#6260)
从 6.0 迁移到 6.2
Redis 6.2 大体上是 6.0 的严格超集,您应该可以毫无问题地将应用程序从 6.0 升级到 6.2。然而,上述列出了一些小型的行为变更,请确保这些变更不会对您产生严重影响。
本文是译自Redis 6.2版本发布记录。