Redis 企业版软件发布说明 7.2.4-52 (2023年8月)

Redis 7.0 和 7.2 的特性。自动分层(Redis on Flash 的增强后继者)。支持 RESP3。分片发布/订阅。新的集群管理器 UI 预览。Redis Stack 7.2 的特性。三个 Redis 数据库版本。许可证文件结构更新。Redis ACL 选择器和增强的基于键的权限。新的 INFO 字段。日志轮换增强。支持多操作系统升级的集群模块。

​Redis Enterprise Software version 7.2.4 现已发布!

亮点

此版本提供:

  • Redis 7.0 和 7.2 特性

  • 自动分层(Redis on Flash 的增强后继者)

  • 支持RESP3

  • 分片的发布/订阅

  • 新集群管理器用户界面(管理控制台)的预览

  • Redis Stack 7.2 特性

  • 三个Redis数据库版本:7.2、6.2、6.0

  • 许可证文件结构更新

  • Redis ACL 选择器和增强的基于键的权限

  • 新的 INFO 字段

  • 日志轮换增强

  • 支持多操作系统升级的集群模块

此版本中的新内容

新功能

Redis 7.0 特性

以下Redis 7.0功能现已支持:

  • Redis 函数

    在 Redis 企业版软件中,FUNCTION STATS 返回一个额外的参数,一个名为 all_running_scripts 的数组,以反映同时运行的多个函数。

  • Multipart AOF (仅追加文件)

  • 新命令

  • 分片的 PUBSUB(详情请参见 Sharded pub/sub

Redis 7.2 特性

以下Redis 7.2功能现已支持:

  • 各种性能改进

  • CONFIG SET 用于设置区域设置

  • 连接层模块化

  • 编码改进:用于集合和列表的listpack

  • 可观察性:认证指标(通过INFO命令暴露)

  • 流消费者组改进

  • 命令:ZRANK, ZREVRANK 新增 WITHSCORE 选项

  • 集群分片拓扑中的分片ID

  • 将分片ID引入Redis集群

  • 支持 CLIENT NO-TOUCH 命令

  • WAIT AOF

自动分层 - Redis on Flash 的演进使吞吐量翻倍并减少延迟

Redis Enterprise 7.2 版本引入了自动分层作为 Redis on Flash 的增强后继者,它允许您通过使用闪存驱动器扩展 RAM 来以更低的成本配置更大的数据库。

Redis Enterprise Auto Tiering 使用 Speedb 替代 RocksDB 作为其存储引擎,在相同的基础设施资源下,吞吐量翻倍并减少了延迟。例如,一个 1 TB 的数据库,每秒 50K 操作,现在可以在相同的基础设施上每秒处理 100K 操作。

要将现有数据库切换到使用 Speedb 进行自动分层并提高性能:

  1. 将集群升级到Redis Enterprise Software版本7.2.4。

  2. 将每个启用了自动分层的数据库升级到Redis数据库版本7.2。

有关自动分层的更多信息,请参阅:

RESP3 支持

Redis Enterprise 7.2 中添加了对 RESP3 和 HELLO 命令的支持。

要在Redis Enterprise中使用RESP3:

  1. 将Redis服务器升级到7.2或更高版本。

    对于Active-Active和Replica Of数据库:

    1. 将所有参与的集群升级到Redis Enterprise版本7.2.x或更高版本。

    2. 将所有数据库升级到7.x或更高版本。

  2. 为您的数据库启用RESP3支持(默认情况下enabled):

    rladmin tune db db:<ID> resp3 enabled
    

如果您使用Redis客户端Go-Redis版本9或Lettuce版本6及更高版本运行Redis Stack命令,请在升级到Redis 7.2之前查看客户端先决条件,以了解如何防止由于RESP3的重大更改而导致的潜在应用程序问题。

分片的发布/订阅

Sharded pub/sub 现在已支持。

如果您停用RESP3支持,则无法使用分片发布/订阅。

新集群管理器用户界面预览

Redis Enterprise Software 7.2.4 版本中提供了新的集群管理界面(管理控制台)的预览。

尝试新的用户界面:

  • 在登录屏幕上:

    1. 输入您的凭据。

    2. 选择在新界面中登录

  • 直接从新用户界面的登录屏幕登录,网址为 https://:8443/new

  • 如果您当前已登录到旧版用户界面:

    1. 选择切换到新的管理控制台以展开屏幕顶部的横幅。

    2. 点击立即试用按钮以在另一个标签页中打开新用户界面。

新用户界面的优势
  • 用户驱动设计

  • 提供完整功能,完全在用户界面中完成任务

  • 新属性和改进的功能可见性

  • 在突出推荐路径的同时提供配置灵活性

  • 满足不同角色和使用场景的需求

  • 更快的故障排除和更轻松的维护

新用户界面亮点
  • 更多可配置的数据库属性,包括副本高可用性、分片放置和代理策略。

  • 节点指示它是主节点还是辅助节点。

  • 模块显示正在使用它们的数据库。

  • 证书显示过期和有效性,您可以上传和复制证书。

  • 集群许可证显示集群已使用的分片数量与集群许可的分片数量。新的用户界面允许您粘贴或上传新的许可证。

  • 基于角色的访问控制(RBAC)有解释以提高清晰度。

  • 访问控制列表(ACLs)现在支持为模块定义ACLs。

  • 数据库屏幕为每个数据库提供了更多信息,以便更快地进行故障排除。它还允许您过滤数据库并比较数据库指标。

  • 集群名称、用户和用户角色显示在右上角,以便从任何屏幕快速识别集群。您还可以从下拉菜单中更改用户密码

  • 自动分层许可和用于在启用自动分层的数据库中使用的存储引擎的切换(仅在新用户界面中可用)。

  • 输入验证。

新用户界面限制

以下功能在此预览版中不受支持,但将在未来的版本中添加。在此之前,请暂时切换到旧版用户界面以执行以下操作:

  • 配置和设置Active-Active数据库(可查看)。

  • 搜索并导出事件日志。

  • 从用户界面中移除一个节点。

额外限制:

  • 尽管Redis支持memcached数据库,但新UI仅允许查看和删除。建议Memcached用户迁移到Redis,以享受Redis及其UI的全部优势。

要在登录新用户界面时打开旧版管理控制台,请选择您的用户名,然后从列表中选择切换到旧版管理控制台

Select switch to legacy admin console from the dropdown.
未来的用户界面改进
  • 配置默认数据库设置和数据库升级设置

  • 与密码和登录管理相关的安全偏好设置

  • LDAP 改进

  • IPv6 支持

  • ACL改进,例如ACLv2智能验证

  • 还有更多

注意:
随着新集群管理器UI的发布,旧版UI被视为已弃用,并最终将被淘汰。新功能将仅在新集群管理器UI中实现,旧版UI将不再维护,除非是关键的bug修复。

Redis Stack 7.2 特性

Redis Enterprise Software 版本 7.2.4 支持 Redis Stack 版本 7.2 中包含的功能。

以下部分包括一些亮点。更多详情,请参阅Redis Stack 7.2 发布说明

搜索和查询
  • 引入Geo Polygon搜索。地理范围查询现在接受GEOSHAPE字段类型,该类型支持使用WKT表示法的多边形形状。GEOSHAPE支持POLYGONPOINT作为形状格式和多边形操作。

  • 使用FT.SEARCHFT.AGGREGATE进行SORT BY操作的性能改进。

  • 新的 FORMAT 用于提高可读性,并仅在 RESP3 中为 FT.SEARCHFT.AGGREGATE 提供更好的错误处理响应支持。

JSON

JSON 引入了两个新命令:

  • JSON.MERGE 将给定的JSON值合并到匹配的路径中,以更新、删除或扩展匹配路径上的JSON值。

  • JSON.MSET 根据指定的键-路径-值三元组设置或更新一个或多个JSON值。

触发器和函数预览

触发器和功能的预览可用。

触发器和函数支持在Redis进程中运行JavaScript函数。这些函数可以按需执行,由事件驱动的触发器执行,或由流处理触发器执行。

尝试使用触发器和函数快速入门

Note:
  • 触发器和函数的预览版本不适用于生产环境,因为API可能会在未来发生变化,在升级到后续版本时可能会导致应用程序问题。

  • 在预览期间,启用了自动分层(以前称为Redis on Flash)的数据库不支持触发器和函数。

模块版本

Redis 企业软件版本 7.2.4 包含以下 Redis Stack 模块:

请参阅升级模块了解如何为数据库升级模块。

增强功能

三个Redis数据库版本

Redis Enterprise Software 6.x 版本包含两个 Redis 数据库版本:6.0 和 6.2。从 7.2 版本开始,Redis Enterprise Software 包含三个 Redis 数据库版本:6.0、6.2 和 7.2。

查看可用的Redis数据库版本:

  • 在集群管理器用户界面中,查看集群 > 配置屏幕上的Redis数据库版本

  • 发送一个GET /nodes REST API 请求并在响应中查看supported_database_versions

默认的Redis数据库版本,在升级现有数据库或创建新数据库时使用,不同Redis Enterprise版本之间的差异如下:

Redis
企业版
捆绑的 Redis
数据库版本
默认数据库版本
(升级/新数据库)
7.2 6.0, 6.2, 7.2 7.2
6.4.2 6.0, 6.2 6.2
6.2.x 6.0, 6.2 6.0

对于Redis企业软件版本7.2.4,default_redis_version对于majorlatest升级策略都是7.2。

更新的Redis企业版许可证格式

Redis Enterprise Software 版本 7.2.4 包括对其许可证格式的更新,该更新为用于自动分层的 RAM 和闪存分片添加了单独的分片限制。

欲了解更多信息,请参阅集群许可证密钥

Redis ACL 选择器和基于键的权限

Redis 企业版 7.2 中的 ACL 支持键权限和选择器。

关键权限:

  • %R~: 授予对匹配给定模式的键的读取权限。

  • %W~: 授予对匹配给定模式的键的写访问权限。

  • %RW~: ~ 的别名。授予对匹配给定模式的键的读写权限。

    有关更多信息,请参阅 key permissions

选择器允许您在单个Redis ACL中定义多组规则(仅支持Redis 7.2或更高版本的数据库)。如果命令匹配基本规则或Redis ACL中的任何选择器,则允许执行该命令。有关更多信息,请参见selectors

  • (): 创建一个新的选择器。

  • clearselectors: 删除用户的所有现有选择器。此操作不会删除基本的ACL规则。

Redis ACLs 在 Redis 企业版软件中有以下不同之处:

  • 不支持嵌套选择器。

    例如,以下选择器在 Redis Enterprise 中无效:+GET ~key1 (+SET (+SET ~key2) ~key3)

  • 键和发布/订阅模式不允许以下字符:'(', ')'

  • 不支持以下密码语法:'>', '<', '#!', 'resetpass'

    要在Redis Enterprise Software中更改密码,请使用以下方法之一:

  • ACL 构建器 不支持选择器和键权限。请使用 自由文本命令 手动定义它们。

新的信息字段

INFO 命令包含新的字段:

  • STATS部分下:

    • current_eviction_exceeded_time - Redis Enterprise 的回复始终为“0”

    • total_eviction_exceeded_time - Redis Enterprise 的回复始终为“0”

    • current_active_defrag_time - Redis Enterprise 的回复始终为“0”

    • total_active_defrag_time - Redis Enterprise 的回复始终为“0”

  • MEMORY部分下:

    • maxmemory_policy - maxmemory-policy配置指令的值

INFO 命令现在可以接受多个部分参数(需要 Redis 数据库版本 7 或更高版本)。

日志轮换增强

  • logrotate 工具会轮换超过 200 MB 的日志。

  • logrotate 每五分钟运行一次,而不是每天一次。

  • 作业调度器运行logrotate而不是操作系统。

  • 每次集群升级都会覆盖日志轮换配置。

  • 您可以在$pkgconfdir/logrotate.conf编辑日志轮转配置(pkgconfdir默认为/opt/redislabs/config,但在自定义安装中可以更改)。请注意,自上一版本以来,配置文件已移动。

  • 您可以使用作业调度器REST API请求PUT /v1/job_scheduler来更改logrotate工具运行的频率。

支持多操作系统升级的集群模块

从Redis Enterprise版本7.2开始,所有未来的7.2.x升级都支持包含模块的数据库集群与操作系统(OS)升级的组合。

已解决的问题

  • RS54131 - 在启用TLS的数据库上未收到+OK回复

  • RS101525 - 集群在Grafana上提供了错误的数据库连接数

  • RS104028 - 修复自签名证书脚本:生成具有多个FQDN的证书时出错

  • RS87920 - 代理日志中充满了警告信息“无法检查正在运行的子同步器进程0的状态:没有子进程”

  • RS99916 - 修复了UI日志,以在登录时包含LDAP用户的名称

  • RS84273 - 当具有Redis admin角色的LDAP用户在UI中查看日志时,他们获得了db_viewer权限而不是admin权限,这限制了日志的可见性

  • RS62552 - 修复了当密码包含%字符时,LDAP用户的数据库认证失败问题

版本变更

重大变更

  • MULTI命令序列中使用UNWATCH命令时的差异:

    • Redis Enterprise:在MULTI命令序列中不允许使用UNWATCH,并会返回错误。

    • OSS:在MULTI序列中允许使用UNWATCH,但没有效果。

  • 在Redis Enterprise的OSS集群模式下发送PUBSUB SHARDNUMSUB命令时,Redis Enterprise会检查请求的频道的哈希槽。如果频道没有哈希到同一个槽,Redis Enterprise会响应CROSSSLOT错误,或者如果频道哈希到不同的节点,则响应MOVED错误。

Redis 7.2 重大变更

当开源Redis的新主要版本更改现有命令时,将数据库升级到新版本可能会破坏某些功能。在升级之前,请确保阅读提供的会影响Redis Enterprise的重大更改列表,并更新连接到数据库的任何应用程序以处理这些更改。

确认您的Redis数据库版本(redis_version)使用管理控制台或通过redis-cli运行以下INFO命令:

$ redis-cli -p <port> INFO
"# Server
redis_version:7.0.8
..."

从版本6.2的重大变更

从版本6.2升级到开源Redis版本7.2,引入了以下可能对Redis Enterprise产生破坏性变化的更改。

可编程性
  • Lua脚本不再能够访问print()函数(#10651)- print函数已从Lua中移除,因为它可能会导致Redis进程卡住(如果没有人从stdout读取)。用户应使用redis.log。另一种方法是覆盖print实现并将消息打印到日志文件中。

  • 在只读脚本中阻止 PFCOUNTPUBLISH(*_RO 命令,no-writes)(#10744) - 将 PFCOUNTPUBLISH 视为脚本中的写命令,除了 EVAL;这意味着:

    • 它们永远不能在带有 shebang(#!)且没有 no-writes 标志的脚本中使用
    • 它们在 EVAL_RO_RO 变体中被阻止(即使在没有 shebang(#!)标志的脚本中)
    • 允许在 EVAL 中使用 no-write 脚本(不仅仅是在 EVAL_RO 中),即使在 CLIENT PAUSE WRITE 期间
  • COMMAND命令响应中隐藏may_replicate标志 (#10744) - 作为将may_replicate命令PFCOUNTPUBLISH视为脚本中的写命令的一部分,除了EVAL之外,may_replicate标志已从COMMAND响应中移除。

  • 时间采样在命令执行和脚本运行期间现在被冻结(#10300)。当命令或脚本正在运行时,命令或脚本使用的键将不会过期。这会破坏任何使用循环等待键过期的脚本。

  • 脚本中的阻塞命令现在与在事务中使用时的工作方式相同(#11568)。

错误处理
  • 重新表述了一些关于无效命令或参数的错误响应 (#10612) -

    • 未知命令的错误响应引入了大小写变化 (Unknown 改为 unknown)
    • 模块命令的错误扩展到了子命令,更新了语法以匹配 Redis 服务器的语法
    • 模块命令的参数数量错误引入了大小写变化 (Wrong 改为 wrong);将考虑完整的命令名称
  • 修正了从EVAL脚本返回的错误代码(#10218, #10329)。

    这些示例展示了行为的变化:

      1: config set maxmemory 1
      2: +OK
      3: eval "return redis.call('set','x','y')" 0
    - 4: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: @user_script: 1: -OOM command not allowed when used memory > 'maxmemory'.
    + 4: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: OOM command not allowed when used memory > 'maxmemory'.
      5: eval "return redis.pcall('set','x','y')" 0
    - 6: -@user_script: 1: -OOM command not allowed when used memory > 'maxmemory'.
    + 6: -OOM command not allowed when used memory > 'maxmemory'.
      7: eval "return redis.call('select',99)" 0
      8: -ERR Error running script (call to 4ad5abfc50bbccb484223905f9a16f09cd043ba8): @user_script:1: ERR DB index is out of range
      9: eval "return redis.pcall('select',99)" 0
     10: -ERR DB index is out of range
     11: eval_ro "return redis.call('set','x','y')" 0
    -12: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: @user_script: 1: Write commands are not allowed from read-only scripts.
    +12: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: ERR Write commands are not allowed from read-only scripts.
     13: eval_ro "return redis.pcall('set','x','y')" 0
    -14: -@user_script: 1: Write commands are not allowed from read-only scripts.
    +14: -ERR Write commands are not allowed from read-only scripts.
    
  • ZPOPMIN/ZPOPMAX 在计数为0且非有序集合时会产生错误的回复 #9711):

    • ZPOPMIN/ZPOPMAXkey 不是有序集合且可选的 count 参数设置为 0 时,以前会产生一个 (empty array),现在会产生一个 WRONGTYPE 错误响应。
    • 可选的 count 参数必须为正数。负值会产生一个 value is out of range 错误。

    这些示例展示了行为的变化:

      1: zadd myzset 1 "one"
      2: (integer) 1
      3: zadd myzset 2 "two"
      4: (integer) 1
      5: zadd myzset 3 "three"
      6: (integer) 1
      7: zpopmin myzset -1
    - 8: (empty array)
    + 8: (error) ERR value is out of range, must be positive
      9: 127.0.0.1:6379> set foo bar
     10: OK
     11: zpopmin foo 0
    -12: (empty array)
    +12: (error) WRONGTYPE Operation against a key holding the wrong kind of value
    
  • LPOP/RPOP 在针对不存在的列表时返回一个空数组,而不是 (nil)#10095)。此更改已回溯到 6.2 版本。

  • LPOP/RPOP 在计数为0时用于产生 (nil),现在产生一个空数组 (#9692)。此更改已回溯到6.2版本。

  • XCLAIM/XAUTOCLAIM 跳过已删除的条目,而不是回复 nil,并从待处理条目列表中删除它们 (#10227) - XCLAIM/XAUTOCLAIM 现在表现如下:

    • 如果您尝试认领一个已删除的条目,它将被从找到它的待处理条目列表(PEL)中删除(以及组的PEL)。因此,这样的条目不会被认领,只是从PEL中清除(因为它无论如何都不存在于流中)。
    • 因为已删除的条目不会被认领,X[AUTO]CLAIM 不会返回 "nil" 来代替条目。
    • XAUTOCLAIM 响应中添加了所有已删除流ID的数组。
  • 当键不再存在时释放的阻塞流命令会返回不同的错误代码(#11012)。

    • 对于新解除阻塞的流、列表和有序集合,旧实现在流键被删除或被不同类型覆盖时返回UNBLOCKED。现在,错误将与命令在效果之后处理时相同。
  • Redis中的ACL错误已经统一。(#11160

    • 当使用RedisModule_Call模块API函数时,ACL错误返回-NOPERM而不是-ERR
  • XREADGROUPXAUTOCLAIM 无论是否能够执行读取或声明操作,都会创建一个消费者 (#11012)。

  • 任何不是数字的浮点数将返回 nan (#11597)。

访问控制列表
  • ACL GETUSER 回复现在使用 ACL 语法来表示 keyschannels (#9974)。ACL GETUSER 现在使用 ACL DSL(领域特定语言)来表示 keys 和 channels。

    这些示例展示了行为的变化:

      1: acl setuser foo off resetchannels &channel1 -@all +get
      2: OK
      3: acl getuser foo
      4: 1) "flags"
      5: 2) 1) "off"
      6: 3) "passwords"
      7: 4) (empty array)
      8: 5) "commands"
      9: 6) "-@all +get"
     10: 7) "keys"
    -11: 8) (empty array)
    +11: 8) ""
     12: 9)"channels"
    -13 10) 1) "channel1"
    +13 10) "&channel1"
    
  • SORT/SORT_RO 命令在 ACL 未授予命令完全访问所有键的权限时,拒绝 GETBY 中的键访问模式 (#10340) - sortsort_ro 命令可以通过 GETBY 访问外部键。为了确保用户不会违反授权 ACL 规则,Redis 7 将拒绝外部键访问模式,除非 ACL 允许 SORT 对所有键的完全访问。 为了向后兼容,带有 GET/BYSORT 仍然有效,但如果 ACL 对某些键有限制,使用这些功能将导致权限被拒绝的错误。

    这些示例展示了行为的变化:

    USER FOO (+sort ~* ~mylist) 
    #FOO> sort mylist by w* get v*  - 是允许的,因为 ~* 提供了对所有键的完全访问
    
    USER FOO (+sort %R~* ~mylist) 
    #FOO> sort mylist by w* get v*  - 是允许的,因为 %R~* 提供了对所有键的完全读取访问**
    
    USER FOO (+sort %W~* ~mylist)
    #FOO> sort mylist by w* get v*  - 现在会失败,因为 $W~* 只提供了对所有键的完全写入访问
    
    USER FOO (+sort ~v* ~mylist)
    #FOO> sort mylist by w* get v*  - 现在会失败,因为 ~v* 只提供了对部分键的访问
    
  • 修复了SELECT、[WAIT](/docs/latest/commands/wait/)、ROLE、[LASTSAVE](/docs/latest/commands/lastsave/)、[READONLY](/docs/latest/commands/readonly/)、[READWRITE](/docs/latest/commands/readwrite/)、[ASKING](/docs/latest/commands/asking/)、#9208的ACL类别:

    • SELECTWAIT已从@keyspace重新分类为@connection

    • ROLELASTSAVE已被分类为@admin@dangerous

    • ASKINGREADONLYREADWRITE也被分配了@connection类别,并从@keyspace中移除

    • 命令类别在ACL文档中有详细解释

    • 当被阻塞的客户端被解除阻塞时,现在会重新评估ACL和OOM条件检查(#11012)。

      • 如果自命令执行以来ACL规则发生了变化,客户端解除阻塞后命令可能会失败。
命令内省、统计和配置
  • COMMAND 回复删除了 randomsort-for-scripts 标志,这些标志现在是 command tips 的一部分 (#10104) - random 标志被替换为 nondeterministic_output 提示;sort-for-scripts 标志被替换为 nondeterministic_output_order 提示

  • INFO commandstats 现在显示每个子命令的统计信息 (#9504) 例如,之前的版本会为所有命令使用情况提供一个单一的条目,而在 Redis 7 中,每个子命令都会单独报告:

    • Redis 6.2:

      cmdstat_acl:calls=4,usec=279,usec_per_call=69.75,rejected_calls=0,failed_calls=2
      
    • Redis 7:

      cmdstat_acl|list:calls=1,usec=4994,usec_per_call=4994.00,rejected_calls=0,failed_calls=0
      cmdstat_acl|setuser:calls=2,usec=16409,usec_per_call=8204.50,rejected_calls=0,failed_calls=0
      cmdstat_acl|deluser:calls=1,usec=774,usec_per_call=774.00,rejected_calls=0,failed_calls=0
      cmdstat_acl|getuser:calls=1,usec=6044,usec_per_call=6044.00,rejected_calls=0,failed_calls=0
      
  • CONFIG REWRITE, CONFIG RESETSTAT, 以及大多数 CONFIG SET 命令现在在加载期间被允许 (#9878)

  • 当运行 XINFO CONSUMERS 时,idle 时间现在显示自上次尝试交互以来经过的毫秒数,而 inactive 时间显示自上次成功交互以来经过的毫秒数 (#11099)

    • 以前,idle 时间显示自上次成功交互以来经过的毫秒数,并且没有 inactive 时间。
  • 命令统计仅在命令执行时更新(#11012)。

    • 以前,即使命令被阻止,命令统计也会更新。现在,命令统计仅在命令执行时更新。

Redis 7.2 升级的客户端先决条件

Redis客户端Go-Redis版本9和Lettuce版本6及更高版本默认使用RESP3。如果您使用任一客户端运行Redis Stack命令,应在将数据库升级到Redis版本7.2之前将客户端的协议版本设置为RESP2,以防止由于RESP3的重大更改而导致的潜在应用程序问题。

对于使用 Go-Redis v9.0.5 或更高版本的应用程序,将协议版本设置为 RESP2:

client := redis.NewClient(&redis.Options{
    Addr:     "<database_endpoint>",
    Protocol: 2, // Pin the protocol version
})

要将协议版本设置为使用Lettuce v6或更高版本的RESP2:

import io.lettuce.core.*;
import io.lettuce.core.api.*;
import io.lettuce.core.protocol.ProtocolVersion;

// ...
RedisClient client = RedisClient.create("<database_endpoint>");
client.setOptions(ClientOptions.builder()
        .protocolVersion(ProtocolVersion.RESP2) // Pin the protocol version 	
        .build());
// ...

如果您正在使用LettuceMod,您需要升级到v3.6.0

弃用

命令弃用

API弃用

自 Redis Enterprise v4.3.3 起已弃用的字段:

  • smtp_use_tls(已替换为smtp_tls_mode

  • dns_address_master

  • endpoint_node

  • endpoint_ip

  • public_addr(已替换为external_addr

自 Redis Enterprise v4.4.2 起已弃用的字段:

  • default_shards_overbooking(已替换为shards_overbooking

自 Redis Enterprise v6.4.2 起已弃用的字段:

  • use_ipv6(已替换为use_external_ipv6

  • redis_cleanup_job_settings(已替换为persistence_cleanup_scan_interval

自 Redis Enterprise v5.0.1 起已弃用的字段:

  • bdb_high_syncer_lag (已替换为 replica_src_high_syncer_lagcrdt_src_high_syncer_lag)

  • bdb_syncer_connection_error

  • bdb_syncer_general_error

  • sync_sources(已替换为replica_sourcescrdt_sources

  • sync(已替换为replica_synccrdt_sync

  • ssl (已替换为 tls_mode)

自 Redis Enterprise v7.2.4 起已弃用的字段:

  • node.bigstore_driver(已替换为cluster.bigstore_driver

  • auth_method

  • authentication_redis_pass(在6.0.X版本中被多个密码功能取代)

  • slave_ha 集群策略

其他已弃用的字段:

  • import/rdb_url (自 Redis Enterprise v4.X 起已弃用)

  • logrotate_dir(将被替换为logrotate_config或移除)

已弃用的CLI命令:

  • rlutil change_master(自 Redis Enterprise v6.2.18 起已弃用,替换为 rladmin change_master

  • rlutil reserved_ports(自 Redis Enterprise v7.2 起已弃用,替换为 rladmin cluster config reserved_ports

自 Redis Enterprise v7.2 起,REST API 请求已弃用:

  • POST /v1/modules (已替换为 POST /v2/modules)

  • DELETE /v1/modules (已替换为 DELETE /v2/modules)

访问控制弃用

  • 以下预定义角色和Redis ACLs不再适用于新Redis Enterprise Software版本7.2.4集群:

    • 自定义角色(非管理角色):集群成员、集群查看者、数据库成员、数据库查看者、无。

    • Redis ACLs:非危险和只读。

  • 在即将发布的维护版本中,当您升级到Redis Enterprise Software版本7.2.4时,除非它们与集群中的任何用户或数据库相关联,否则已弃用的角色和ACL将自动被移除。

  • 之前的Redis企业版软件发布说明中包含了基于SASL的LDAP的弃用通知。当您升级到Redis企业版软件7.2.4版本时,所有现有的“外部”用户(以前用于支持基于SASL的LDAP)将被移除。

旧版用户界面

随着新版集群管理器UI的发布,旧版UI被视为已弃用,并最终将被淘汰。新功能将仅在新版集群管理器UI中实现,旧版UI将不再维护,除非是关键的bug修复。

RedisGraph

Redis 已宣布 RedisGraph 的生命周期结束。Redis 将继续支持所有 RedisGraph 客户,包括发布补丁版本,直到 2025 年 1 月 31 日。

查看RedisGraph 终止支持公告了解更多详情。

RHEL 和 CentOS 7.0-7.9

对RHEL和CentOS 7.0-7.9的支持被视为已弃用,并将在未来的版本中移除。

Oracle Linux 7

Oracle Linux 7 支持被视为已弃用,并将在未来的版本中移除。

Amazon Linux 1

Amazon Linux 1 的支持被视为已弃用,并将在未来的版本中移除。

Ubuntu 16.04

Ubuntu 16.04 的弃用已在 Redis Enterprise Software 6.4.2 发布说明 中宣布。自 Redis Enterprise Software 7.2.4 起,不再支持 Ubuntu 16.04。

RC4加密算法

RC4加密算法已被认为过时,推荐使用更强的加密算法。discovery service对RC4的支持将在未来的版本中移除。

3DES加密算法

3DES加密算法已被认为过时,推荐使用更强的加密算法如AES。 请确认所有客户端、应用程序和连接都支持AES加密算法。未来版本将移除对3DES的支持。 某些操作系统,如RHEL 8,已经移除了对3DES的支持。Redis企业版软件无法支持底层操作系统不支持的加密套件。

TLS 1.0 和 TLS 1.1

TLS 1.0 和 TLS 1.1 连接已被弃用,建议使用 TLS 1.2 或更高版本。 请确保所有客户端、应用程序和连接都支持 TLS 1.2。对早期协议的支持将在未来的版本中移除。 某些操作系统,如 RHEL 8,已经移除了对早期协议的支持。Redis Enterprise Software 无法支持底层操作系统不支持的连接协议。

即将到来的变化

准备限制性的发布/订阅权限

Redis数据库版本6.2引入了发布/订阅ACL规则,这些规则决定了用户可以访问哪些发布/订阅频道

配置选项 acl-pubsub-default,在 Redis Enterprise Software 版本 6.4.2 中添加,用于确定所有发布/订阅通道的集群范围默认访问级别。Redis Enterprise Software 默认使用以下发布/订阅权限:

  • 对于版本6.4.2和7.2,acl-pubsub-default默认是宽松的(allchannels&*),以适应早期的Redis版本。

  • 在未来的版本中,acl-pubsub-default 将更改为限制性(resetchannels)。限制性权限默认会阻止所有发布/订阅频道,除非由ACL规则明确允许。

如果您使用ACLs和pub/sub通道,您应该审查您的数据库和ACL设置,并计划将您的集群过渡到限制性的pub/sub权限,以准备未来的Redis Enterprise Software版本。

当您将集群的默认发布/订阅权限更改为限制性时,&* 会被添加到 完全访问 ACL 中。在进行此更改之前,请考虑以下事项:

  • 由于发布/订阅 ACL 语法是在 Redis 6.2 中添加的,在此更改后,您无法将 完全访问 ACL 与 6.0 或更低版本的数据库关联。

  • 如果您再次将acl-pubsub-default更改为宽松模式,完全访问 ACL 不会被恢复。

  • 每个启用了默认用户的数据库都使用完全访问 ACL。

为了保护发布/订阅通道并为将来默认具有限制性发布/订阅权限的Redis Enterprise Software版本准备您的集群:

  1. 升级Redis数据库:

    • 对于Redis Enterprise Software版本6.4.2,请将集群中的所有数据库升级到Redis DB版本6.2。

    • 对于Redis Enterprise Software版本7.2.4,请将集群中的所有数据库升级到Redis DB版本7.2或6.2。

  2. 使用resetchannels &channel格式创建或更新具有特定频道权限的ACLs。

  3. 将ACLs与相关数据库关联。

  4. 将默认的发布/订阅权限(acl-pubsub-default)设置为限制性。详情请参阅更改默认的发布/订阅权限

  5. 如果出现任何问题,您可以暂时将默认的发布/订阅设置更改回宽松模式。在再次使发布/订阅权限变得严格之前,请解决所有有问题的ACL。

即将到来的命令请求和响应更改

开源Redis版本7.2更改了几个命令的请求和响应策略。由于Redis Enterprise版本7.2的GA发布不包括这些策略更改,命令的行为可能与开源Redis不同。然而,这些更改将包含在未来的Redis Enterprise维护版本中:

  • RANDOMKEYSCAN 将从无响应策略更改为 SPECIAL 响应策略。

  • MSETNX 目前具有 MULTI_SHARD 请求策略和 AGG_MIN 响应策略。两者都将更改为无策略。

有关请求和响应策略的更多信息,请参阅Redis命令提示

支持的平台

下表提供了截至本次Redis Enterprise Software发布时支持的平台的快照。有关操作系统兼容性的更多详细信息,请参阅支持的平台参考

支持 – 该平台支持此版本的 Redis Enterprise Software。

⚠️ 已弃用 – 此版本的 Redis Enterprise Software 仍然支持该平台,但在未来的版本中将不再支持。

生命周期结束 – 此版本的Redis Enterprise Software已停止平台支持。

Redis Enterprise 7.2.4 6.4.2 6.2.18 6.2.12 6.2.10 6.2.8 6.2.4
Ubuntu1
20.04 6
18.04 ⚠️
16.04 ⚠️
RHEL & CentOS2
8.8
8.7
8.5-8.6
8.0-8.4
7.0-7.9 ⚠️
Oracle Linux3
8
7 ⚠️
Rocky Linux3
8
Amazon Linux
2 7
1 ⚠️
Docker4
Kubernetes5
  1. 建议在生产安装中使用Ubuntu的服务器版本。桌面版本仅建议用于开发部署。

  2. RHEL 和 CentOS 部署需要 OpenSSL 1.0.2 和 防火墙配置

  3. 基于相应的RHEL版本。

  4. Docker images 的 Redis Enterprise Software 仅被认证用于开发和测试。

  5. 查看Kubernetes 的 Redis Enterprise 文档

  6. Ubuntu 20.04 支持已在 Redis Enterprise Software 6.4.2-43 中添加。

  7. 在Redis Enterprise Software 6.4.2-61中添加了对Amazon Linux 2支持的候选版本。在Redis Enterprise Software 6.4.2-69中正式添加了对Amazon Linux 2的支持。

下载

下表显示了可用包的MD5校验和:

MD5校验值 (7.2.4-52 八月发布)
Ubuntu 18 7c7e465c8e129a03ee9f585137b2a1d9
Ubuntu 20 631f27311b19806955fde012953ff9c9
红帽企业版 Linux (RHEL) 7
甲骨文企业版 Linux (OL) 7
ae76798b1b7243313b4f4cba6ede88d7
红帽企业版 Linux (RHEL) 8
甲骨文企业版 Linux (OL) 8
Rocky 企业版 Linux
48936b25aefa2921d38aea84ad06134d
亚马逊Linux 2 3e8180d7a9ebc3784ab6080234edefd5

已知问题

旧版用户界面的已知问题

在使用旧版用户界面时,即使这些设置可见,您也无法在设置 > 首选项标签页上更新并保存您的更改。此问题将在下一个维护版本中修复。

作为一种解决方法,使用新的集群管理器UI从集群 > 安全 > 首选项选项卡更新这些设置。

发布/订阅频道ACL限制

在Redis Enterprise Software版本6.4.2中,您可以在Redis ACL规则中使用&channel语法来允许访问特定的发布/订阅频道,即使默认的发布/订阅权限是允许的(&allchannels&*),默认情况下允许所有频道。然而,&allchannels &channel不是有效的语法。

截至 Redis Enterprise Software 版本 7.2.4,您无法使用此规则组合创建 Redis ACL。如果默认的发布/订阅权限是限制性的(resetchannels),您只能使用 &channel 来允许访问特定频道。

将包含无效语法 &allchannels &channel(在7.2版本之前创建)的ACL与用户和数据库关联可能会导致数据库处于挂起状态,无法正常工作。

为了防止这个问题:

  1. 审查所有现有的ACL规则。

  2. 对于每个包含 &channel 的规则,要么:

    • 添加 resetchannels 前缀以默认限制对所有频道的访问。

    • 如果不需要,删除规则。

已知限制

命令限制

  • CLIENT NO-TOUCH 在以下情况下可能无法正确运行:

    • Redis 数据库版本早于 7.2.0。

    • CLIENT NO-TOUCH 命令被 ACL 规则禁止。

    在发送此命令之前,客户端应验证数据库版本是否为 7.2.0 或更高版本,并确认使用此命令是被允许的。

  • 如果订阅时正则表达式发生了变化,则不能使用SUNSUBSCRIBE来取消订阅分片频道。

  • 使用 XREADGROUP BLOCK> 返回所有新流将导致 Redis 数据库冻结,直到分片重新启动。(#12031)

  • 因为被拒绝的命令不会记录命令统计的持续时间,所以在重新处理后会出现一个错误,这将导致Redis数据库冻结,直到分片重新启动。(#12247)

模块无法在Oracle Linux 7和8中加载

在Oracle Linux 7和8上托管的数据库无法加载模块。

作为临时解决方案,您可以在集群配置存储(CCS)中更改节点的os_name

ccs-cli hset node:<ID> os_name rhel

手动上传模块的集群恢复

对于包含手动上传模块的数据库的集群,集群恢复需要一个额外的步骤。

在集群节点上安装Redis Enterprise Software后,在上传兼容模块到modulesdir (/opt/redislabs/lib/modules)之前,继续恢复过程。

此限制将在未来的维护版本中移除。

安全

开源Redis安全修复兼容性

作为Redis对安全的承诺的一部分,Redis企业软件实施了最新的安全修复,这些修复与开源Redis一起提供。Redis企业版已经包含了相关CVE的修复。

一些针对开源Redis宣布的CVE不影响Redis Enterprise,因为Redis Enterprise提供了开源Redis中不可用的不同或额外功能。

Redis Enterprise 7.2.4-52 支持开源 Redis 7.2、6.2 和 6.0。以下是按版本修复的开源 Redis CVE 列表。

Redis 7.2.0 包含了之前版本的所有CVE修复。

Redis 7.0.x:

  • (CVE-2023-36824) 在某些情况下,从命令和参数列表中提取键名可能会触发堆溢出,导致读取随机堆内存、堆损坏,并可能实现远程代码执行。具体来说:使用COMMAND GETKEYS*和在ACL规则中验证键名。(Redis 7.0.12)

  • (CVE-2023-28856) 认证用户可以使用HINCRBYFLOAT命令创建一个无效的哈希字段,这将在访问时导致Redis崩溃。(Redis 7.0.11)

  • (CVE-2023-28425) 特别构造的 MSETNX 命令可能导致断言失败和服务拒绝。(Redis 7.0.10)

  • (CVE-2023-25155) 特别构造的 SRANDMEMBERZRANDMEMBERHRANDFIELD 命令可能触发整数溢出,导致运行时断言和 Redis 服务器进程终止。(Redis 7.0.9)

  • (CVE-2023-22458) Redis 中的 HRANDFIELDZRANDMEMBER 命令存在整数溢出问题,可能导致拒绝服务。(Redis 7.0.8)

  • (CVE-2022-36021) 使用特殊构造的模式进行字符串匹配命令(如SCANKEYS),以触发对Redis的拒绝服务攻击,导致其挂起并消耗100%的CPU时间。(Redis 7.0.9)

  • (CVE-2022-35977) Redis 中的 SETRANGESORT/SORT_RO 命令存在整数溢出问题,可能导致 Redis 出现 OOM 崩溃。(Redis 7.0.8)

  • (CVE-2022-35951) 在特定状态下对流键执行XAUTOCLAIM命令,并使用特制的COUNT参数,可能会导致整数溢出,随后的堆溢出,并可能引发远程代码执行。该问题影响Redis版本7.0.0或更高版本。(Redis 7.0.5)

  • (CVE-2022-31144) 在特定状态下,对流键执行精心构造的XAUTOCLAIM命令可能导致堆溢出,并可能实现远程代码执行。该问题影响Redis版本7.0.0或更新版本。(Redis 7.0.4)

  • (CVE-2022-24834) 在Redis中执行特制的Lua脚本可以触发cjson和cmsgpack库中的堆溢出,导致堆损坏并可能实现远程代码执行。该问题存在于所有支持Lua脚本的Redis版本中,从2.6开始,仅影响经过身份验证和授权的用户。(Redis 7.0.12)

  • (CVE-2022-24736) 攻击者尝试加载特制的Lua脚本可能导致空指针解引用,从而导致redis-server进程崩溃。此问题影响所有版本的Redis。(Redis 7.0.0)

  • (CVE-2022-24735) 通过利用Lua脚本执行环境中的弱点,能够访问Redis的攻击者可以注入Lua代码,这些代码将以另一个Redis用户的(可能更高的)权限执行。(Redis 7.0.0)

Redis 6.2.x:

  • (CVE-2023-28856) 认证用户可以使用HINCRBYFLOAT命令创建一个无效的哈希字段,该字段在访问时会导致Redis崩溃。(Redis 6.2.12)

  • (CVE-2023-25155) 特别构造的 SRANDMEMBERZRANDMEMBERHRANDFIELD 命令可能触发整数溢出,导致运行时断言失败并终止 Redis 服务器进程。(Redis 6.2.11)

  • (CVE-2023-22458) Redis 中的 HRANDFIELDZRANDMEMBER 命令存在整数溢出问题,可能导致拒绝服务。(Redis 6.2.9)

  • (CVE-2022-36021) 使用特殊构造的模式进行字符串匹配命令(如SCANKEYS),以触发对Redis的拒绝服务攻击,导致其挂起并消耗100%的CPU时间。(Redis 6.2.11)

  • (CVE-2022-35977) Redis 中的 SETRANGESORT/SORT_RO 命令存在整数溢出问题,可能导致 Redis 发生 OOM 崩溃。(Redis 6.2.9)

  • (CVE-2022-24834) 在Redis中执行特制的Lua脚本可以触发cjson和cmsgpack库中的堆溢出,导致堆损坏并可能执行远程代码。该问题存在于所有支持Lua脚本的Redis版本中,从2.6开始,仅影响经过身份验证和授权的用户。(Redis 6.2.13)

  • (CVE-2022-24736) 攻击者尝试加载特制的Lua脚本可能导致空指针解引用,从而导致redis-server进程崩溃。此问题影响所有版本的Redis。(Redis 6.2.7)

  • (CVE-2022-24735) 通过利用Lua脚本执行环境中的弱点,能够访问Redis的攻击者可以注入Lua代码,这些代码将以另一个Redis用户的(可能更高的)权限执行。(Redis 6.2.7)

  • (CVE-2021-41099) 当手动将proto-max-bulk-len配置为非默认的非常大的值时,处理某些字符串命令和网络负载时,整数到堆缓冲区溢出。(Redis 6.2.6)

  • (CVE-2021-32762) 在某些较旧且不常见的平台上,redis-cliredis-sentinel 在解析大型多批量回复时存在整数到堆缓冲区溢出问题。(Redis 6.2.6)

  • (CVE-2021-32761) Redis 2.2 或更新版本中的一个整数溢出漏洞,可以通过使用 BITFIELD 命令来利用,导致堆损坏并可能实现远程代码执行。(Redis 6.2.5)

  • (CVE-2021-32687) 当手动配置set-max-intset-entries为非默认的非常大的值时,整数集合可能导致堆缓冲区溢出。(Redis 6.2.6)

  • (CVE-2021-32675) 在处理具有大量元素的RESP请求负载时,可能会导致拒绝服务。(Redis 6.2.6)

  • (CVE-2021-32672) Lua 调试器中的随机堆读取问题。(Redis 6.2.6)

  • (CVE-2021-32628) 在处理ziplist编码的数据类型时,整数到堆缓冲区溢出,当为hash-max-ziplist-entrieshash-max-ziplist-valuezset-max-ziplist-entrieszset-max-ziplist-value配置较大的非默认值时。(Redis 6.2.6)

  • (CVE-2021-32627) 当配置非默认的大值时,流中的整数到堆缓冲区溢出问题,涉及 proto-max-bulk-lenclient-query-buffer-limit。(Redis 6.2.6)

  • (CVE-2021-32626) 特别构造的Lua脚本可能导致堆缓冲区溢出。(Redis 6.2.6)

  • (CVE-2021-32625) Redis 6.0 或更新版本中的一个整数溢出漏洞可以通过使用 STRALGO LCS 命令来利用,导致堆损坏并可能实现远程代码执行。这是 CVE-2021-29477 的不完全修复的结果。(Redis 6.2.4)

  • (CVE-2021-29478) Redis 6.2 中的一个整数溢出漏洞可能被利用来破坏堆,并可能导致远程代码执行。该漏洞涉及更改默认的 set-max-intset-entries 配置值,创建一个由整数值组成的大集合键,并使用 COPY 命令复制它。该整数溢出漏洞存在于从 2.6 版本开始的所有 Redis 版本中,可能导致损坏的 RDB 或 DUMP 负载,但不能通过 COPY 利用(在 6.2 之前不存在)。(Redis 6.2.3)

  • (CVE-2021-29477) Redis 6.0 或更新版本中的一个整数溢出漏洞可能被利用,通过 STRALGO LCS 命令破坏堆,并可能导致远程代码执行。该整数溢出漏洞存在于从 6.0 开始的所有 Redis 版本中。(Redis 6.2.3)

Redis 6.0.x:

  • (CVE-2022-24834) 在Redis中执行特制的Lua脚本可以触发cjson和cmsgpack库中的堆溢出,导致堆损坏并可能执行远程代码。该问题存在于所有支持Lua脚本的Redis版本中,从2.6开始,并且仅影响经过身份验证和授权的用户。(Redis 6.0.20)

  • (CVE-2023-28856) 认证用户可以使用HINCRBYFLOAT命令创建一个无效的哈希字段,该字段在访问时会导致Redis崩溃。(Redis 6.0.19)

  • (CVE-2023-25155) 特别构造的 SRANDMEMBERZRANDMEMBERHRANDFIELD 命令可能触发整数溢出,导致运行时断言并终止 Redis 服务器进程。(Redis 6.0.18)

  • (CVE-2022-36021) 使用特殊构造的模式进行字符串匹配命令(如SCANKEYS),以触发对Redis的拒绝服务攻击,导致其挂起并消耗100%的CPU时间。(Redis 6.0.18)

  • (CVE-2022-35977) Redis 中的 SETRANGESORT/SORT_RO 命令存在整数溢出问题,可能导致 Redis 出现 OOM 崩溃。(Redis 6.0.17)

RATE THIS PAGE
Back to top ↑