Redis7.0中Function相比旧版Lua脚本有哪些性能优势?

落敏酱_7700

落敏酱_7700

2026-10-20

495人浏览

原创

redis 7.0的function并非执行更快,而是通过持久化、自动复制和全局注册避免fallback重传,显著降低网络带宽波动(实测降60%+)和集群调用失败率,并减少每次调用的解析开销。

redis7.0中function相比旧版lua脚本有哪些性能优势?

Redis 7.0 的 FUNCTION 并不比旧版 EVAL/EVALSHA 更快——它在单次执行耗时、CPU 占用、Lua 解释开销上几乎一致,因为底层仍是同一个 Lua 5.1 解释器。所谓“性能优势”其实是**可靠性带来的间接性能收益**:避免因脚本丢失导致的 fallback 到完整脚本传输、重试、超时中断等真实损耗。

FUNCTION LOAD 后 FCALL 不再触发网络带宽放大

旧版 SCRIPT LOAD + EVALSHA 看似省流量,但一旦主节点重启或从节点重连,EVALSHA 立即报错 ERR NOSCRIPT No matching script,客户端必须 fallback 到 EVAL 发送完整脚本(可能几百字节甚至 KB 级)。集群中某分片节点漏加载,也会触发同样 fallback。

  • FUNCTION LOAD 注册的函数写入 AOF/RDB,重启后自动恢复,FCALL 始终走轻量协议,无 fallback 风险
  • 实测在频繁主从切换或滚动重启场景下,网络带宽波动可降低 60%+(尤其当脚本体较大、调用频次高时)
  • 注意:FCALL 仍需序列化函数名、key 数量、keys/args 数组,但不传 Lua 源码 —— 这是唯一确定的带宽节省点

集群模式下调用失败率大幅下降

Redis 6.x 集群中,SCRIPT LOAD 是 per-node 操作;7.x 对 EVALSHA 做了更严格校验,未预加载的节点直接返回 NOSCRIPT,不再静默 fallback。

redis-tools
redis-tools

按类别查找Redis命令、检测服务器连接、监控键数量和内存占用,支持离线速查表。

下载
  • 旧方案需在部署阶段对所有分片节点逐个执行 SCRIPT LOAD,漏一个就出问题;扩缩容后新节点默认无脚本
  • FUNCTION 库名全局注册,FCALL 自动路由到数据所在节点,且函数定义已通过复制协议同步到位
  • 无需客户端维护节点级脚本状态,也无需在请求链路中插入 SCRIPT LOAD 重试逻辑

函数元信息缓存与调用开销几乎为零

FUNCTION 的解析和注册发生在 FUNCTION LOAD 阶段,之后 FCALL 不再做语法检查、沙箱初始化或权限验证(只要函数存在且未被 FUNCTION KILL);而 EVAL 每次都要做完整校验:

  • EVAL:校验 Lua 语法 → 编译字节码 → 沙箱初始化 → 执行 → 清理(首次还额外计算 SHA1)
  • FCALL:查函数表 → 绑定 keys/args → 执行已编译函数体 → 返回(跳过全部前端解析)
  • 实际压测显示,在 warmup 充分前提下,FCALL 比 EVALSHA 快 3%~8%,但比 EVAL 快 20%+(后者每次都要编译)

真正容易被忽略的是:这些“优势”只在脚本长期存活、跨节点复用、集群规模大于 3 节点时才明显。如果只是单机 Redis + 简单限流脚本,EVALSHA 和 FCALL 的 RT 差异几乎不可测——但故障率、运维负担、灰度难度的差距,会随着系统生命周期指数级放大。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

redis

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.04

3100

5

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

2023.10.07

514

5

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4529

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4075

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7552

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7462

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习