《Redis设计与实现》第20章 Lua脚本

Redis从2.6版本起支持Lua脚本,通过在服务器内嵌Lua环境,实现原子地执行多个Redis命令。Lua环境经过一系列修改,如加载函数库、创建全局表格redis、替换随机函数等,确保无副作用。EVAL命令创建并执行脚本,EVALSHA命令通过SHA1校验和调用已执行过的脚本。服务器还有SCRIPT FLUSH、SCRIPT EXISTS、SCRIPT LOAD和SCRIPT KILL等脚本管理命令。在主从复制中,写性质的脚本命令会复制到从服务器,EVALSHA命令的复制需确保从服务器有对应脚本,否则将转换为EVAL命令传播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录​​​​​​​

第20章 Lua脚本

20.1 创建并修改Lua环境

20.2 Lua环境协作组件

20.3 EVAL命令的实现

20.4 EVALSHA命令的实现

20.5 脚本管理命令的实现

20.6 脚本复制

20.7 重点回顾

20.8 参考资料


第20章 Lua脚本

Redis从2.6版本开始引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端原子地执行多个Redis命令。

其中,使用EVAL命令可以直接对输入的脚本进行求值:



redis> EVAL "return 'hello world'" 0
"hello world"

而使用EVALSHA命令则可以根据脚本的SHA1校验和来对脚本进行求值,但这个命令要求校验和对应的脚本必须至少被EVAL命令执行过一次:



redis> EVAL "return 1+1" 0
(integer) 2
redis> EVALSHA "a27e7e8a43702b7046d4f6a7ccf5b60cef6b9bd9" 0 // 
上一个脚本的校验和
integer) 2 

或者这个校验和对应的脚本曾经被SCRIPT LOAD命令载入过:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值