本文翻译自 https://github.com/redis/redis/releases, 由于译者才疏学浅,错漏之处敬请海涵。

Redis 7.0-rc1 新增加了几个面向用户的功能,并对性能和其他的方面做了优化。 有些修改可能破坏旧版本向后兼容性,请谨慎升级。
与之前版本有明显区别的,需要用户特别注意:

  1. Redis7 将 AOF 作为多个文件存储在一个文件夹中
  2. Redis7 对 RDB 文件使用了新版本格式(10),与旧版本不兼容
  3. Redis7 在加载旧的 RDB 文件时,会将 ziplist 编码的 key 转换为 listpack。 这通常发生在从 RDB 加载文件或者主从复制之间,并且会降低加载速度。
  4. 更多的改变可以查看有关重大更新的部分

如果对源代码感兴趣,可以参考 https://github.com/redis/redis/pull/ 查看对于 6.2 版本的代码修改。

新特性

  • Redis Function: 使用服务器脚本扩展 Redis 的新方法,使得 Lua 脚本成为 Redis 的一部分,可以持久化,复制和命名称。可以参考文档 https://redis.io/topics/functions-intro
  • ACL: V2版本————细粒度基于 key 的权限控制,通过 selector 支持多种命令规则。 可以参考文档 https://redis.io/topics/acl#key-permissions 和 https://redis.io/topics/acl#selectors
  • Cluster: 支持用于特定节点的发布/订阅功能(比如分片)。可以参考文档 https://redis.io/topics/pubsub#sharded-pubsub
  • 在大多数情况下,将子命令视为命令处理,这会影响 ACL 类别和 info 统计信息等。
  • 命令元数据和文档更新: https://redis.io/commands/command-docs 和 https://redis.io/topics/command-tips
  • Command key-specs: 更好的方法使得客户端定位 key 和进行读写目的 https://redis.io/topics/key-specs
  • 使用 Multi-Part AOF 机制避免 AOF 重写机制的开销
  • Cluster: 支持域名(之前仅支持ip)
  • 改进了对网络缓冲区消耗的内存的管理,以及当总内存超过限制时剔除客户端的选项
  • Cluster: 在集群链接缓冲区上加入内存管理机制
  • AOF: 增加时间戳和对基于时间点恢复的支持
  • Lua: 支持 EVAL 脚本中的函数标志
  • Lua: RESP3 协议支持回复 Verbatim 和 Big-Number 类型
  • Lua: 可以通过命令获取 Reids 的版本

新的命令和新的命令参数

  • ZMPOP、BZMPOP命令
  • LMPOP、BLMPOP 命令
  • SINTERCARD、ZINTERCARD 命令
  • SPUBLISH、SSUBSCRIBE、SUNSUBSCRIBE、PUBSUB、SHARDCHANNELS/SHARDNUMSUB 命令
  • EXPIRETIME、PEXPIRETIME 命令
  • EXPIRE 命令组支持 NX/XX/GT/LT 选项
  • SET 命令支持组合 NX 和 GET 标志
  • BITPOS, BITCOUNT 接受 BIT 索引
  • SORT_RO 命令在只读副本上运行
  • SHUTDOWN 支持参数 NOW、FORCE、ABORT
  • EVAL_RO,EVALSHA_RO 命令变体,在只读副本上运行
  • FUNCTION *,FCALL,FCALL_RO 命令,可以查看文档 https://redis.io/commands/function-load
  • CONFIG SET/GET 可以在一次调用中自动处理多个配置
  • QUIT 提升为真正的命令,HOST: 和 POST 从命令列表中降级
  • XADD 通过 -* 支持自动序列号

新的管理和自省命令和命令新增加的参数

  • COMMAND DOCS
  • COMMAND LIST
  • COMMAND INFO 接受子命令作为参数,也可以没有参数
  • LATENCY HISTOGRAM
  • CLUSTER LINKS
  • CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE
  • CLIENT NO-EVICT
  • ACL DRYRUN
  • SLOWLOG GET 支持传入 -1 获取所有条目

命令回复值的增加条目

  • COMMAND 和 COMMAND INFO 扩展了提示、关键字和子命令
  • ACL CAT、COMMAND LIST 列出子命令
  • OBJECT ENCODING 返回 listpack 而不是 ziplist
  • 集群分片支持主机名
  • COMMAND 命令:添加blocking和module标志
  • MODULE LIST 回复包括路径和参数

重大变化和更新

  • 将绑定参数修改为非默认值将不再隐式禁用保护模式
  • 删除 EVAL 脚本逐字复制、传播和确定性执行逻辑。(从 6.0 版本之后,该功能被默认关闭,不再受支持)
  • ACL:发布/订阅频道默认被阻塞 (acl-pubsub-default=resetchannels)
  • SCRIPT LOAD 和 SCRIPT FLUSH 不再传播到从库/AOF
  • ACL:在启动文件和命令行参数中声明重复的 ACL 用户将导致错误(之前最后一个声明将覆盖其他声明)
  • 主从复制:TTL 总是被复制为绝对(非相对)毫秒时间戳
  • 在可写副本上处理多键命令会先触发过期逻辑
  • CONFIG SET maxmemory 在开始逐出逻辑之前返回
  • AOF: 新的 Multi-Part 机制将数据作为一组多个文件存储在指定文件夹中
  • 删除 STRALGO 命令
  • 删除 gopher 协议支持
  • MODULE 和 DEBUG 命令默认禁用,以提高安全性
  • 拒绝 MULTI/EXEC 事务中的快照创建和其他管理命令
  • 当 replica-serve-stale-data=no 时,PING 现在被 -MASTERDOWN 拒绝
  • ACL GETUSER 使用 ACL 语法回复 keys 和 channels
  • Command 命令回复丢弃 random 和 sort-for-scripts 标记
  • 对不存在的列表进行计数的 LPOP/RPOP 返回空数组
  • INFO commandstats 现在显示每个子命令的统计信息
  • ZPOPMIN/ZPOPMAX 用于非 ZSET 类型时返回类型错误
  • CONFIG GET 返回有效的当前值,即使正在使用隐式默认值
  • CONFIG REWRITE 重写要加载的模块列表
  • 无盘复制现在默认设置为 yes
  • Shutdown 时,可以选择等待一段时间让副本完成复制
  • 在加载期间允许大多数 CONFIG SET、REWRITE、RESETSTAT 命令
  • 在加载期间允许使用 READONLY 和 READWRITE 命令
  • 修改 SELECT、WAIT、ROLE、LASTSAVE、READONLY、READWRITE、ASKING 的 ACL 类别
  • 在未经身份验证的连接上允许 RESET
  • 允许在陈旧的副本上加载脚本

安全改进

  • 敏感的命令和配置默认被禁用
  • 更改配置项 bind(地址绑定)和保护模式的安全性
  • redis-cli 的修改
  • Sentinel 避免记录 auth-pass 值

性能和资源利用改进

  • 集群模式下显著提高延迟并降低内存开销
  • 在很多 zset 和 hash 键时降低内存开销
  • 复制积压缓冲区和主从复置缓冲区使用一个全局共享的缓冲区
  • 减少写时复制内存开销
  • 释放集群发送缓冲区中未使用的容量
  • 充分利用客户端结构内存用于回复缓冲区
  • 将 ziplist 替换为 listpack
  • 对于 list 支持存储超过 4GB 的元素
  • 为临时客户端对象添加了一个池,以便在模块操作中重用
  • 移除命令参数计数限制,动态增长 argv 缓冲区
  • list 操作从更靠近元素的一侧开始查找
  • 改进 fsync 以避免大量写入磁盘
  • BITSET 和 BITFIELD SET 仅在值实际更改时传播
  • 降低客户端被模块解锁阻塞时的延时

其他一般改进

  • 主重启后可能进行部分同步
  • Redis 从空启动时始终创建基础 AOF 文件
  • 副本在 repl-diskless-load=swapdb 期间继续提供数据以获得更好的可用性

CLI 工具的变化

  • redis-cli --json: 增加 -2 选项
  • redis-cli --scan: 添加睡眠间隔选项
  • redis-cli --replica: 跳过 RDB 生成
  • redis-cli --functions-rdb: 仅生成带函数的 RDB
  • redis-cli -X: 从标准输入中获取任意参数
  • redis-benchmark -x: 从标准输入获取参数
  • redis-benchmark: 添加 URI 支持
  • redis-cli monitor 和 pubsub 可以使用 Ctrl+C 中止,保持 cli 活动

平台/工具链支持相关改进

  • 升级 jemalloc 5.2.1
  • 修复 NetBSD 和 OpenBSD 上的 RSS 指标
  • 检查 macOS、FreeBSD 和 OpenBSD 上的 somaxconn 系统设置
  • 在 MacOS 上提高 fsync 的断电安全性

新的配置选项

  • CONFIG SET/GET 可以在一次调用中处理多个配置
  • 支持配置包含文件的 glob 模式匹配
  • appenddirname,存放多部分 AOF 文件的文件夹
  • maxmemory-clients,允许限制所有客户端的总内存使用量
  • cluster-port,可以控制集群的绑定端口
  • bind-source-addr,配置参数控制传出连接IP
  • busy-reply-threshold,旧 lua-time-limit 的别名
  • repl-diskless-sync-max-replicas,在某些情况下允许更快的复制
  • latency-tracking, enabled by default, and latency-tracking-info-percentiles
  • cluster-announce-hostname 和 cluster-preferred-endpoint-type
  • cluster-allow-pubsublocal-when-down
  • cluster-link-sendbuf-limit
  • list-max-listpack- 、 hash-max-listpack-、 zset-max-listpack-* 作为 ziplist 配置的别名

INFO命令的改变

  • INFO: latencystats 部分
  • INFO: total_active_defrag_time and current_active_defrag_time
  • INFO: total_eviction_exceeded_time and current_eviction_exceeded_time
  • INFO: evicted_clients
  • INFO: mem_cluster_links, total_cluster_links_buffer_limit_exceeded
  • INFO: current_cow_peak
  • INFO: Remove aof_rewrite_buffer_length
  • MEMORY STATS: 在集群模式下报告 slot 到 key 的映射大小
  • INFO MEMORY: 单独现实函数和 EVAL 的内存使用
  • INFO MEMORY: 增加 mem_total_replication_buffers
  • CLIENT LIST: tot-mem, multi-mem
  • CLIENT LIST, INFO: 显示 RESP 版本
  • SENTINEL INFO: tilt_mode_since
  • LATENCY: 跟踪模块获取 GIL 延迟

MODULE API 的变化

  • 添加用于回复 RESP3 类型的 API
  • 添加来自 RM_Call 的 RESP3 类型的恢复回复功能
  • RM_Call 添加 ‘0’ 和 ‘3’ 标志来控制要使用的 RESP 版本
  • 添加对显式验证 ACL 的支持
  • 添加 list 类型相关的 API
  • 添加 API 以在长时间占用主线程时让出 Redis 事件
  • 添加 API 用于注册到 Redis 事件循环
  • 增强 mem_usage/free_effort/unlink/copy 和 IO 回调函数以适配 key 和 dbindex
  • 增强 mem_usage 回调以获取请求的样本大小
  • RM_GetContextFlags: 增加 CTX_FLAGS_ASYNC_LOADING, CTX_FLAGS_RESP3
  • 将 API 标记改编为非实验性
  • 添加 RM_CreateSubcommand
  • 添加 RM_KeyExists
  • 添加 RM_TrimStringAllocation
  • 添加 RM_LoadDataTypeFromStringEncver
  • 添加 RM_MonotonicMicroseconds
  • 添加 ReplAsyncLoad 事件并弃用 ReplBackup 事件
  • 为 RM_SetModuleOptions 增加 OPTIONS_HANDLE_REPL_ASYNC_LOAD 标志

Bug 修复

  • 当 key 不存在时,调用 EVAL 上的 COMMAND GETKEYS
  • 通过分配器提高内存使用率
  • 手动故障转移结束后取消暂停客户端,而不是等待
  • Lua:修复带有许多参数的脚本调用崩溃
  • Lua:使用所有字符计算字符串哈希以防止哈希冲突
  • 防止 LCS 通过 proto-max-bulk-len 分配临时内存
  • Tracking:始终在命令回复后发出无效消息
  • Cluster:CLUSTER SLOTS 响应中隐藏空的 slave
  • CLIENT KILL 在 ID 为 0 时杀死所有客户端
  • 使用 list-compress-depth 修复列表周围的错误
  • 修复 RESTORE、RDB 加载和模块 API 中的一个 LRU 错误
  • 使用 RESETSTAT 重置 lazyfreed_objects 信息字段
  • 修复 RDB 和列表节点压缩以处理大于 4GB 的值
  • 修复向 Set 或 Hash 添加大于 2GB 的元素时的崩溃
  • 无盘复制不能算作更改
  • 修复由于溢出导致的过度流修剪
  • 加载时接收 SIGTERM 时安全有序的退出
  • 改进 EXPIRE TTL 溢出检测
  • 为 INFO 错误统计添加丢失的错误计数
  • DECRBY LLONG_MIN 导致否定溢出
  • 修复消费者创建和删除中的 Stream keyspace 通知
  • 修复 zset 中超过 2B 条目的排列溢出
  • 如果文件夹名称包特殊字符,请避免以 check-aof / check-rdb / sentinel 模式启动
  • 只有在解析完整个配置文件后才创建日志文件
  • redis-cli:修改 --bigkeys、–memkeys、–hotkeys 的 SCAN 睡眠间隔
  • redis-cli:修复提示以在RESET 后显示正确的 DB 编号和事务状态
  • 模块 API:修复可能的传播错误,以防模块在命令之外调用 CONFIG SET maxmemory
  • 模块 API:将客户端 RESP 版本传递给模块被阻塞的客户端
  • 模块 API:在集群重新分片和关闭状态下释放模块命令阻塞的客户端
  • Sentinel:修复主机重启后的可用
  • Sentinel:使用 TLS 修复内存泄漏
  • Sentinel:修复由于重复的零端口可能导致的故障转移
  • Sentinel:修复主机名支持问题
  • Sentinel:修复某些容器环境中的选举失败

已知的问题

  • 缺少提供附加命令元数据的模块 API
  • 缺少支持新 ACL 选择器的模块 API
  • ACL 键访问选择器还不适用于带有 GET/BY 的 SORT 命令
  • redis-check-aof 中缺少 Multi-Part AOF 支持

Redis 7.0-rc1 版本发布了,都有什么新功能呢相关推荐

  1. Redis 5.0 正式版发布了,19 个新特性

    转载自  Redis 5.0 正式版发布了,19 个新特性 Redis 5.0 GA 正式版发布了! 下载地址: download.redis.io/releases/redis-5.0.0.tar. ...

  2. Vite 2.0版本发布,都有哪些新特性

    新年还没过完,Vite就发布了2.0版本,不得不佩服尤大大. Vite是什么 Vite(法语意思是 "快",发音为 /vit/,类似 veet)是一种全新的前端构建工具,你可以把它 ...

  3. Redis 6.0 多线程重磅发布!来了解一下吧

    Redis 6.0发布了,这次发布在IT圈犹如一颗惊雷一般,因为这是redis最大的一次改版,首次加入了多线程. 作者Antirez在RC1版本发布时在他的博客写下: the most "e ...

  4. Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

    作者 | 顾荣  南京大学PASALab, Fluid项目co-founder 来源 | 阿里巴巴云原生公众号 导读:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存 ...

  5. P3-weixin-2.0.1 版本发布,JAVA微信插件框架

    P3-weixin-2.0.1版本发布(JAVA微信插件框架) P3-Weixin是轻量级Java插件开发框架,采用主流JAVA技术,集成强大代码生成器,增删改查一键生成,封装统一后台管理系统,不仅适 ...

  6. jeewx-api 1.0.5 版本发布,微信SDK接口封装(支持微信第三方开放平台)

    JeeWx-api 1.0.5 版本发布,微信SDK接口封装 1.jeewx-api为何诞生 现在微信越来越火,基于微信的公众号和服务号越来越丰富,虽然微信帮助文档已经提供了相关的接口,但是接口比较多 ...

  7. Rasa课程、Rasa培训、Rasa实战Rasa 3.1.0最新版本发布 2022-03-25

    Rasa课程.Rasa培训.Rasa实战Rasa 3.1.0最新版本发布 2022-03-25 Rasa 3.1.0 新版本升级内容 10203:为库日志添加配置选项(通过 env 变量). 1047 ...

  8. Apache ShardingSphere 5.0.0-alpha版本发布

    点击蓝字 关注我们 本期看点 Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Shardin ...

  9. Unc0ver-v5.0.1版本发布,报错原因以及广告问题

    unc0ver-v5.0.1版本发布 "通过Cydia和调整注入对iOS 11.0-13.5上的所有设备提供全面支持 启用对越狱应用程序的不受限制的存储访问,以实现沙盒向后兼容性,同时通过为 ...

  10. ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!...

    ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播,点播!还带在线支付功能! ZLMS 开发团队在综合参考了各方面的合理建议之后,经过两个多月的紧张开发及测试,终于发布V1.2.0 ...

最新文章

  1. matlab数据的拼接
  2. src is not broadcastable to dst, but they have the same number of elements
  3. java ui调试_如何使用 IBM i System Debugger 调试 Java 程序
  4. 关于第5周反向传播算法的一些争论与思考
  5. python 量化交易 框架 开源_Hikyuu首页、文档和下载 - 基于 C++/Python 的开源量化交易研究框架 - OSCHINA - 中文开源技术交流社区...
  6. android 三个点按钮实现_Android 常用侧滑栏实现
  7. 【算法大赛直播周】如何让人人都可以使用AI技术?北大崔斌教授亲解自动化机器学习
  8. 数据库设计的三大范式通俗解释
  9. 如何提升会员列表数据的质量
  10. python简易消息连续发送代码
  11. SCUT J.O: 百步梯
  12. 使用Biopython访问NCBI's Entrez数据库
  13. 《惢客创业日记》2019.05.18(周六)视频通话后的一个创意
  14. python如何用一行代码生成[1,4,9,16,25,36,49,64,81,100]
  15. 嵌入式编程与PC编程有何区别
  16. 三、E906移植----FPGA生成可用的比特流并实现串口发送
  17. 多开分身苹果版_【苹果/安卓】影分身,我们每个人都会!
  18. java中实现的十进制转换成二进制的简单代码
  19. 2020研究生数学建模E题--AlexNet深度网络解法(大雾能见度估计与预测)(含代码)
  20. 《算法和数据结构》LeetCode 篇

热门文章

  1. 各种依赖库(转载地址:https://blog.csdn.net/as89751)
  2. 有声书制作是什么?有声书和电子书的区别是什么?
  3. 论文精读——CenterNet :Keypoint Triplets for Object Detection
  4. 计算机维修种子,【数据恢复,维护计算机,硬盘和分区,备份和还原
  5. 激光SLAM-地图边界噪点的处理(地图的美化)--图像处理的方法
  6. ERROR in ch.qos.logback.core.joran.spi.Interpreter@8:17 - no applicable action for [Properties], cur
  7. 基于Android平台的三维实时全景地图设计与实现(二)
  8. 众昂矿业刘金海:我国萤石进出口现状解析
  9. 联想服务器查看告警信息,科普 THINKPAD开机错误消息及报警信息详解
  10. HALCON 引擎学习一