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 企业版软件中,
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 进行自动分层并提高性能:
-
将集群升级到Redis Enterprise Software版本7.2.4。
-
将每个启用了自动分层的数据库升级到Redis数据库版本7.2。
有关自动分层的更多信息,请参阅:
RESP3 支持
Redis Enterprise 7.2 中添加了对 RESP3 和 HELLO
命令的支持。
要在Redis Enterprise中使用RESP3:
-
将Redis服务器升级到7.2或更高版本。
对于Active-Active和Replica Of数据库:
-
将所有参与的集群升级到Redis Enterprise版本7.2.x或更高版本。
-
将所有数据库升级到7.x或更高版本。
-
-
为您的数据库启用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 版本中提供了新的集群管理界面(管理控制台)的预览。
尝试新的用户界面:
-
在登录屏幕上:
-
输入您的凭据。
-
选择在新界面中登录。
-
-
直接从新用户界面的登录屏幕登录,网址为
https://
:8443/new -
如果您当前已登录到旧版用户界面:
-
选择切换到新的管理控制台以展开屏幕顶部的横幅。
-
点击立即试用按钮以在另一个标签页中打开新用户界面。
-
新用户界面的优势
-
用户驱动设计
-
提供完整功能,完全在用户界面中完成任务
-
新属性和改进的功能可见性
-
在突出推荐路径的同时提供配置灵活性
-
满足不同角色和使用场景的需求
-
更快的故障排除和更轻松的维护
新用户界面亮点
-
更多可配置的数据库属性,包括副本高可用性、分片放置和代理策略。
-
节点指示它是主节点还是辅助节点。
-
模块显示正在使用它们的数据库。
-
证书显示过期和有效性,您可以上传和复制证书。
-
集群许可证显示集群已使用的分片数量与集群许可的分片数量。新的用户界面允许您粘贴或上传新的许可证。
-
基于角色的访问控制(RBAC)有解释以提高清晰度。
-
访问控制列表(ACLs)现在支持为模块定义ACLs。
-
数据库屏幕为每个数据库提供了更多信息,以便更快地进行故障排除。它还允许您过滤数据库并比较数据库指标。
-
集群名称、用户和用户角色显示在右上角,以便从任何屏幕快速识别集群。您还可以从下拉菜单中更改用户密码。
-
自动分层许可和用于在启用自动分层的数据库中使用的存储引擎的切换(仅在新用户界面中可用)。
-
输入验证。
新用户界面限制
以下功能在此预览版中不受支持,但将在未来的版本中添加。在此之前,请暂时切换到旧版用户界面以执行以下操作:
-
配置和设置Active-Active数据库(可查看)。
-
搜索并导出事件日志。
-
从用户界面中移除一个节点。
额外限制:
- 尽管Redis支持memcached数据库,但新UI仅允许查看和删除。建议Memcached用户迁移到Redis,以享受Redis及其UI的全部优势。
要在登录新用户界面时打开旧版管理控制台,请选择您的用户名,然后从列表中选择切换到旧版管理控制台:

未来的用户界面改进
-
配置默认数据库设置和数据库升级设置
-
与密码和登录管理相关的安全偏好设置
-
LDAP 改进
-
IPv6 支持
-
ACL改进,例如ACLv2智能验证
-
还有更多
Redis Stack 7.2 特性
Redis Enterprise Software 版本 7.2.4 支持 Redis Stack 版本 7.2 中包含的功能。
以下部分包括一些亮点。更多详情,请参阅Redis Stack 7.2 发布说明。
搜索和查询
-
引入Geo Polygon搜索。地理范围查询现在接受
GEOSHAPE
字段类型,该类型支持使用WKT表示法的多边形形状。GEOSHAPE
支持POLYGON
和POINT
作为形状格式和多边形操作。 -
使用
FT.SEARCH
和FT.AGGREGATE
进行SORT BY
操作的性能改进。 -
新的
FORMAT
用于提高可读性,并仅在 RESP3 中为FT.SEARCH
和FT.AGGREGATE
提供更好的错误处理响应支持。
JSON
JSON 引入了两个新命令:
-
JSON.MERGE 将给定的JSON值合并到匹配的路径中,以更新、删除或扩展匹配路径上的JSON值。
-
JSON.MSET 根据指定的键-路径-值三元组设置或更新一个或多个JSON值。
触发器和函数预览
触发器和功能的预览可用。
触发器和函数支持在Redis进程中运行JavaScript函数。这些函数可以按需执行,由事件驱动的触发器执行,或由流处理触发器执行。
尝试使用触发器和函数快速入门。
-
触发器和函数的预览版本不适用于生产环境,因为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
对于major
和latest
升级策略都是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中更改密码,请使用以下方法之一:
-
集群管理器UI(管理控制台)
-
rladmin cluster reset_password
:rladmin cluster reset_password <用户邮箱>
-
REST API
PUT /v1/users
请求并提供password
-
-
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
实现并将消息打印到日志文件中。 -
在只读脚本中阻止
PFCOUNT
和PUBLISH
(*_RO 命令,no-writes
)(#10744) - 将PFCOUNT
和PUBLISH
视为脚本中的写命令,除了EVAL
;这意味着:- 它们永远不能在带有 shebang(
#!
)且没有no-writes
标志的脚本中使用 - 它们在
EVAL_RO
和_RO
变体中被阻止(即使在没有 shebang(#!
)标志的脚本中) - 允许在 EVAL 中使用
no-write
脚本(不仅仅是在 EVAL_RO 中),即使在CLIENT PAUSE WRITE
期间
- 它们永远不能在带有 shebang(
-
从
COMMAND
命令响应中隐藏may_replicate
标志 (#10744) - 作为将may_replicate
命令PFCOUNT
和PUBLISH
视为脚本中的写命令的一部分,除了EVAL
之外,may_replicate
标志已从COMMAND
响应中移除。 -
时间采样在命令执行和脚本运行期间现在被冻结(#10300)。当命令或脚本正在运行时,命令或脚本使用的键将不会过期。这会破坏任何使用循环等待键过期的脚本。
错误处理
-
重新表述了一些关于无效命令或参数的错误响应 (#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
/ZPOPMAX
在key
不是有序集合且可选的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 版本。 -
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
- 当使用RedisModule_Call模块API函数时,ACL错误返回
-
XREADGROUP
和XAUTOCLAIM
无论是否能够执行读取或声明操作,都会创建一个消费者 (#11012)。 -
任何不是数字的浮点数将返回
nan
(#11597)。
访问控制列表
-
ACL GETUSER
回复现在使用 ACL 语法来表示keys
和channels
(#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 未授予命令完全访问所有键的权限时,拒绝GET
和BY
中的键访问模式 (#10340) -sort
和sort_ro
命令可以通过GET
和BY
访问外部键。为了确保用户不会违反授权 ACL 规则,Redis 7 将拒绝外部键访问模式,除非 ACL 允许SORT
对所有键的完全访问。 为了向后兼容,带有GET
/BY
的SORT
仍然有效,但如果 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类别:
命令内省、统计和配置
-
COMMAND
回复删除了random
和sort-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。
弃用
命令弃用
-
CLUSTER SLOTS
自 Redis 7.0 起已弃用 -
JSON.RESP
自 Redis Stack 7.2 起已弃用。 -
QUIT
自 Redis 7.2 起已弃用
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_lag
和crdt_src_high_syncer_lag
) -
bdb_syncer_connection_error
-
bdb_syncer_general_error
-
sync_sources
(已替换为replica_sources
和crdt_sources
) -
sync
(已替换为replica_sync
和crdt_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版本准备您的集群:
-
升级Redis数据库:
-
对于Redis Enterprise Software版本6.4.2,请将集群中的所有数据库升级到Redis DB版本6.2。
-
对于Redis Enterprise Software版本7.2.4,请将集群中的所有数据库升级到Redis DB版本7.2或6.2。
-
-
使用
resetchannels &channel
格式创建或更新具有特定频道权限的ACLs。 -
将ACLs与相关数据库关联。
-
将默认的发布/订阅权限(
acl-pubsub-default
)设置为限制性。详情请参阅更改默认的发布/订阅权限。 -
如果出现任何问题,您可以暂时将默认的发布/订阅设置更改回宽松模式。在再次使发布/订阅权限变得严格之前,请解决所有有问题的ACL。
即将到来的命令请求和响应更改
开源Redis版本7.2更改了几个命令的请求和响应策略。由于Redis Enterprise版本7.2的GA发布不包括这些策略更改,命令的行为可能与开源Redis不同。然而,这些更改将包含在未来的Redis Enterprise维护版本中:
有关请求和响应策略的更多信息,请参阅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 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-
RHEL 和 CentOS 部署需要 OpenSSL 1.0.2 和 防火墙配置。
-
Docker images 的 Redis Enterprise Software 仅被认证用于开发和测试。
-
Ubuntu 20.04 支持已在 Redis Enterprise Software 6.4.2-43 中添加。
-
在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
为了防止这个问题:
-
审查所有现有的ACL规则。
-
对于每个包含
&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) 特别构造的
SRANDMEMBER
、ZRANDMEMBER
和HRANDFIELD
命令可能触发整数溢出,导致运行时断言和 Redis 服务器进程终止。(Redis 7.0.9) -
(CVE-2023-22458) Redis 中的
HRANDFIELD
和ZRANDMEMBER
命令存在整数溢出问题,可能导致拒绝服务。(Redis 7.0.8) -
(CVE-2022-36021) 使用特殊构造的模式进行字符串匹配命令(如
SCAN
或KEYS
),以触发对Redis的拒绝服务攻击,导致其挂起并消耗100%的CPU时间。(Redis 7.0.9) -
(CVE-2022-35977) Redis 中的
SETRANGE
和SORT
/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) 特别构造的
SRANDMEMBER
、ZRANDMEMBER
和HRANDFIELD
命令可能触发整数溢出,导致运行时断言失败并终止 Redis 服务器进程。(Redis 6.2.11) -
(CVE-2023-22458) Redis 中的
HRANDFIELD
和ZRANDMEMBER
命令存在整数溢出问题,可能导致拒绝服务。(Redis 6.2.9) -
(CVE-2022-36021) 使用特殊构造的模式进行字符串匹配命令(如
SCAN
或KEYS
),以触发对Redis的拒绝服务攻击,导致其挂起并消耗100%的CPU时间。(Redis 6.2.11) -
(CVE-2022-35977) Redis 中的
SETRANGE
和SORT
/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-cli
和redis-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-entries
、hash-max-ziplist-value
、zset-max-ziplist-entries
或zset-max-ziplist-value
配置较大的非默认值时。(Redis 6.2.6) -
(CVE-2021-32627) 当配置非默认的大值时,流中的整数到堆缓冲区溢出问题,涉及
proto-max-bulk-len
和client-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) 特别构造的
SRANDMEMBER
、ZRANDMEMBER
和HRANDFIELD
命令可能触发整数溢出,导致运行时断言并终止 Redis 服务器进程。(Redis 6.0.18) -
(CVE-2022-36021) 使用特殊构造的模式进行字符串匹配命令(如
SCAN
或KEYS
),以触发对Redis的拒绝服务攻击,导致其挂起并消耗100%的CPU时间。(Redis 6.0.18) -
(CVE-2022-35977) Redis 中的
SETRANGE
和SORT
/SORT_RO
命令存在整数溢出问题,可能导致 Redis 出现 OOM 崩溃。(Redis 6.0.17)