命令/功能 | 云 Redis 5.0 | 云 Redis 6.2 | 云 Redis7.0 | 说明 |
RESP3 | - | - | - | 目前产品不支持,请评估业务框架是否存在使用 HELLO 3 auth username password 形式进行认证,使用 resp3 协议,需要降级为 resp2协议。 |
ACL | - | - | - | 当前产品暂不支持 ACL,需业务确认是否依赖该功能。该限制同时影响所有涉及 ACL 用户的命令接口,包括 acl、auth、migrate auth 及 client kill user 等。 |
Module | - | - | - | 当前版本暂不支持 module,请业务确认是否启用相关功能。 |
client-side-caching | - | - | - | 当前版本暂不支持,业务需确认是否依赖客户端缓存优化。 |
pub/sub | - | - | - | |
集群多 DB | 集群支持多 DB | | | 建议不使用也不依赖多 DB 功能。该功能开放 select、swapdb 等命令;部分客户端会以 select 是否成功来判断节点是否处于集群模式,存在误判风险。 |
lua readonly table | 不允许定义非本地函数 | | | 社区为修复 CVE 安全漏洞,在 Lua 沙箱中启用了只读表保护,禁止再定义全局(非 local)函数,否则执行时直接报错:ERR Attempt to modify a readonly table ...。请全量扫描所有 eval、script、function 等 Lua 调用,把所有自定义函数显式改为 local 定义: eval "local function xxx() return 'hello' end" 0 说明: 该变更属于 breaking change,但社区以小版本安全补丁形式发布,不同云厂商、不同大/小版本可能存在差异(回退或未移植)。 不要依赖任何旧写法,业务必须自行保证规范,避免线上故障。 |
lua print | 允许 lua print | | 不允许 lua print | 社区为修复 CVE 安全漏洞,已将 Lua 沙箱中的 print 函数彻底移除(breaking change)。继续使用将直接报错: ERR ... nonexistent global variable 'print' ... 请全量排查所有 eval、script 等 Lua 脚本,删除或替换所有 print(...) 调用,如需输出日志,改用官方 API: redis.log(redis.LOG_NOTICE, 'hello') 。 |
script load | script load 脚本会被编译并放入缓存,同时这条指令本身(含脚本内容)会被作为一条写命令传播给所有从节点,保证从节点拥有同样的脚本缓存。 如果 AOF 持久化已开启,SCRIPT LOAD 会被原样写入 AOF,格式与客户端发来的命令一致。 | | | 社区版 Redis 7.0 开始不再持久化 lua 脚本,云上7.0保留 lua 持久化。 |
script flush | script flush 命令执行会进行主从传播和写入 AOF 文件。主节点清空本地脚本缓存,也会把这条 FLUSH 命令同步给从节点,使从节点同样清空缓存,防止主从脚本缓存不一致。 如果 AOF 持久化已开启,script flush 同样会写入 AOF。 | | | |
lua 脚本持久化 | 主从复制 RDB 里会保存 lua 脚本。 | | | |
lua eval 脚本驱逐 | 云上所有大版本的最新小版本均支持脚本驱逐。 说明: 为防止因把参数拼进脚本正文而滥用 EVAL,Redis 引入500条 LRU 驱逐机制:仅对 EVAL 生成的脚本做淘汰,超限后按最久最少使用顺序自动释放,SCRIPT LOAD 的脚本不受影响。 | | | 业务无需任何改动,该变更仅将社区高版本行为向后移植,与官方最新版保持一致。 注意: 在常规场景下,脚本由 EVAL 每次完整下发,即使因 LRU 机制被驱逐也不会影响业务;但若用户采用非常规方式,先用 EVAL 把脚本载入服务器并自行计算 SHA,再转而使用 EVALSHA 调用,则当单次事务涉及的脚本数量超过500时,最早最少使用的脚本可能被驱逐,导致后续 EVALSHA 返回 NOSCRIPT 错误,事务失败。 |
lua 内存滥用限制 | 云上所有大版本的最新小版本均支持 lua 内存限制。 说明: 社区版 Lua 在执行写命令时不校验 maxmemory,可被恶意脚本(如无限循环 SET, EVAL "for i=1,10000000000 do redis.call('SET', 'key-:' .. i, 'value-:' .. i) end" 0 )绕过内存上限;云环境为防机器 OOM,在 Lua 执行过程中实时检测,一旦超限立即返回 OOM 错误。 | | | 正常业务无需关注,只要实例 maxmemory 充足即可;云侧提供参数 extra-maxmemory,必要时可为实例预留额外空间。 注意: 若触发 OOM,Lua 脚本将中途报错,无法保证原子性。 |
字典 rehash 优化 | 云上所有大版本的最新小版本均支持字典 rehash 优化。 说明: 在社区版字典的实现中,采用了包含主动 rehash 和被动 rehash 的渐进式 rehash 机制。其中,被动 rehash 发生在处理每个用户请求期间,该请求会额外触发渐进式 rehash 操作,导致请求需要执行更多的内存访问,进而增加请求时延并降低节点吞吐量。为优化性能,云上版本将关闭字典的被动 rehash 功能,仅保留主动 rehash。 | | | 注意: 关闭被动 rehash,字典的 rehash 过程速度将有所放缓,可能导致字典中哈希冲突概率的细微增加,同时字典在 rehash 期间使用的临时内存会在监控指标上停留比社区版更长的时间。然而,用户请求在 rehash 期间基本不会因为被动 rehash 而产生额外的性能抖动,这对大部分应用场景下的用户体验是有利的。仅在少数极端场景下,例如存在非常高频的写入操作时,其性能表现会回退到接近社区版的水平。云上版本为此提供了 passive-rehash-enabled 配置项,用于灵活控制是否启用被动 rehash 这一行为。 |
副本主从断连重定向 | 云上所有大版本的最新小版本均支持副本主从断连重定向。 说明: 当副本与主节点的连接断开时,在故障转移(failover)完成恢复之前,到达副本的读请求将被重定向至主节点,以避免在副本处于只读状态时因连接断开而提供陈旧数据。 | | | 业务无需特别处理。 |
info/client info/client list | | | 请自查业务是否依赖 client 命令;如非必需,请避免执行 client list,以免慢查询和节点内存暴涨。 | |
cluster slots | 集群版 cluster slots 命令将屏蔽、转换部分敏感信息。 | | | |
auth/migrate auth/client kill user/acl setuser 等等等 | 无 ACL 组件 | 不支持 ACL 相关接口 | | - |
command/ command info | command 命令是为客户端类库提供命令的元数据信息,以便其进行路由决策、重定向等操作。 | | | 业务无需特别处理。 |
geo* store | 在 Redis 6.2 和7.0版本中修复了以下问题:对于支持 STORE 选项的 GEO 命令(如 GEORADIUS、GEORADIUSBYMEMBER、GEOSEARCHSTORE),当源键 (source key) 为空键时,其行为由原先的“返回空数组且不删除目标键”修改为“删除目标键并返回0”。 | | | ![]() |
zrangestore | 修复了 ZRANGESTORE 命令在配置项 zset-max-ziplist-entries 被设置为0时会导致 Redis 崩溃 (crash) 的问题。 | | | - |
lpop/rpop coun | 6.2.7与7.0.0统一修复了 LPOP/RPOP 的返回行为: 1. 当键存在且 count = 0 时,返回空数组 [](旧版返回 nil); 2. 当键不存在且带 count 参数时,返回长度为 -1 的空数组 [](旧版返回 nil)。 | | | ![]() |