导读:本期聚焦于林则安创作的《Redis 7.0有哪些值得关注的新功能?核心特性详解与实践建议》,敬请观看详情。Redis 7.0是一次内容相当丰富的版本迭代,围绕易用性、安全性和运维能力带来了大量改进。本文将重点介绍几个核心变化:支持服务端脚本管理的Functions,彻底改变Lua脚本的部署方式;权限模型升级到ACL v2,可以按命令类别精细控权;Sharded Pub/Sub让消息只在本分片内传播,降低集群广播开销;同时还有List类型的阻塞命令增强、RedisIO协议层面的优化以及大量性能与内存方面的改进。文章会逐项分析这些特性的设计动机、使用场景,并配合命令示例说明如何在实际项目中落地,帮助开发者快速判断是否值得升级。

Redis 7.0在官方版本序列里算是一次大版本更新,包含超过五十个新增命令和上百项功能改进。虽然它没有引入颠覆性的数据结构,但在脚本管理、权限控制、消息订阅、集群运维这些方向上的变化,足以影响日常开发的使用方式。本文挑选几个最值得关注的新功能展开分析,并给出实践层面的建议。

Redis 7.0有哪些值得关注的新功能?核心特性详解与实践建议

Functions:把脚本变成可管理的数据库对象

在7.0之前,如果想在服务端执行自定义逻辑,基本只能依赖EVAL命令加载Lua脚本。这种模式有个长期被诟病的问题:脚本本身存放在客户端代码里,每次调用都要把完整脚本内容传给服务端,版本管理、灰度发布、多应用共享脚本都很别扭。虽然后来可以用SCRIPT LOAD配合SHA1调用缓解了带宽问题,但脚本元数据的缺失让运维排查变得困难。

7.0引入的Functions机制解决了这个痛点。函数会被注册为一个持久的数据库对象,拥有自己的名字和版本描述,通过FUNCTION LOAD命令一次性加载,之后所有客户端只需用FCALL按名字调用即可。脚本的生命周期完全由服务端管理,配合RDB和AOF持久化,重启后函数依然存在,主从复制时也会自动同步到副本节点。

一个典型的函数定义如下:

#!lua name=mylib
redis.register_function('my_func',
    function(keys, args)
        local val = redis.call('GET', keys[1])
        if not val then
            redis.call('SET', keys[1], args[1])
            return 0
        end
        return 1
    end
)

加载之后使用FCALL my_func 1 mykey init-value即可调用。相比EVAL,这种方式让脚本能纳入代码评审和统一发布流程,团队协作时的脚本冲突问题也明显减少。需要提醒的是,Functions与旧的EVAL体系是并存的,旧脚本无需强制迁移,但新项目建议直接采用Functions。

ACL v2:更细粒度的权限控制

权限管理是7.0另一个重头戏。ACL v2引入了两类新的规则语法:<command>用于针对具体命令的某个子命令进行授权,而&类别则扩展了按命令属性批量授权的能力。最实用的改进是子命令级别的控制,比如可以只允许某个运维账号执行CLIENT INFO,而禁止CLIENT KILL这类高危操作,这在旧版里是做不到的,旧版ACL只能控制到命令级别。

具体配置示例:

# 创建用户,允许CONFIG命令的两个子命令,其余拒绝
ACL SETUSER ops_user on >mypassword ~* \
  +config|get +config|resetstat -config

# 查看某个命令有哪些子命令可用于ACL匹配
ACL DRYRUN ops_user config get maxmemory

另外,7.0还支持把ACL规则定义存储为库的形式,管理员可以通过FUNCTION相关命令结合权限体系,把脚本执行权限也纳入ACL管控。对于多租户共享Redis实例的场景,这套机制能显著降低越权风险。升级时要注意,旧版aclfile在7.0中依然兼容,但建议逐步把粗粒度的-config这类全量禁用规则,改写为子命令级别的白名单,权限收敛会更精准。

Sharded Pub/Sub与List命令增强

Pub/Sub在集群模式下一直有个尴尬之处:消息会在整个集群的所有节点间广播,订阅者不多时这个开销还能接受,一旦频道数量上来,广播风暴会吃掉大量节点间带宽。7.0推出的Sharded Pub/Sub把频道的路由范围限制在分片内部,消息只发给负责该slot的节点及其订阅者,集群带宽占用大幅下降。

使用上只需把命令换成带SSUB前缀的形式:

# 在集群模式下订阅分片级频道
SSUBSCRIBE order.events

# 发布消息,只会路由到对应分片
SPUBLISH order.events "order-1234-created"

需要注意,Sharded Pub/Sub的消息只在分片内可见,如果业务上要求跨分片可靠投递,还是应该考虑Stream加消费组的方式,Pub/Sub本质上仍然不保证消息到达。

除了消息类改进,List类型也新增了两个阻塞命令:BLMPOP和LMPOP。它们支持一次从多个key中弹出元素,并且可以指定弹出数量。这对任务队列场景非常友好,过去用BLPOP只能一次弹一个元素且只能监听单个key列表,消费者吞吐受限明显。配合可选的LEFT或RIGHT方向参数,队列消费的灵活性提升不少。

# 阻塞等待,最多等5秒,从queue:1或queue:2弹出最多10个元素
BLMPOP 5 2 queue:1 queue:2 LEFT COUNT 10

性能与运维层面的其他改进

除了上述三大特性,7.0在底层也有不少值得了解的变化。Redis Cluster现在支持在执行数据迁移的槽位上使用副本节点提供服务,降低了reshard期间对主节点的影响。AOF方面新增了appendfilename按时间戳生成的能力,备份管理更方便。RESP3协议的支持也更加完善,客户端可以获取更丰富的返回类型信息。

内存层面,对短结构数据的编码优化让小容量的Hash、List、ZSet在特定场景下占用更少内存,listpack编码在更多类型上得到应用,逐步替代原本的ziplist实现,既省空间又提升了遍历性能。如果业务中存在大量小对象的场景,从6.x升级到7.0后通常会观察到内存占用有一定程度的下降。

升级建议方面,如果当前版本是6.0或更早,7.0的整体收益是明确的:Functions改善脚本工程化,ACL v2补齐安全短板,Sharded Pub/Sub解决集群广播痛点。升级前重点回归测试ACL配置文件的兼容性,以及确认客户端库版本是否支持新命令。对于重度依赖Lua脚本的系统,建议先用FUNCTION LIST梳理存量脚本,制定分批迁移计划,避免一次性重写带来的风险。

总体来看,Redis 7.0是一次面向生产实践很务实的更新,新功能都不是花架子,而是针对长期存在的工程痛点给出的答案。如果你的团队正在评估升级时机,这几个特性值得作为决策的主要依据。

Redis 7.0新功能FunctionsACL v2修改时间:2026-09-16 21:24:51

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0916/58197.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。