《Redis设计与实现》第二十章总结二:Lua脚本之命令实现

本文总结了《Redis设计与实现》第二十章关于Lua脚本的内容,包括EVAL命令的三个执行步骤:定义脚本函数、保存脚本到lua_scripts字典和执行脚本。还介绍了EVALSHA命令的实现原理以及脚本管理命令如SCRIPT FLUSH、SCRIPT EXISTS、SCRIPT LOAD和SCRIPT KILL的功能和操作。
摘要由CSDN通过智能技术生成

《Redis设计与实现》第二十章总结一:Lua脚本之总述

20.3 EVAL命令的实现

EVAL命令的执行分为三个步骤:
在这里插入图片描述
接下来详细介绍三个步骤,以EVAL “return ‘hello world’” 0为例

20.3.1 定义脚本函数

为传入的脚本定义一个与这个脚本相对应的Lua函数

函数名字由f_前缀加上脚本的SHA1校验和组成,函数体则是脚本本身

例子:
在这里插入图片描述
使用函数来保存脚本的好处:
在这里插入图片描述

20.3.2 将脚本保存到lua_scripts字典

将脚本保存到服务器的lua_scripts字典里面

20.3.3 执行脚本函数

服务器进行一些设置钩子、传入参数之类的准备动作,然后正式开始执行脚本:
在这里插入图片描述

20.4 EVALSHA命令的实现

其原理与20.3.1中使用函数来保存脚本有关:
在这里插入图片描述

20.5 脚本管理命令的实现

20.5.1 SCRIPT FLUSH

用于清除服务器中所有和Lua脚本有关的信息,即释放并重建lua_scripts字典,关闭现有的Lua环境并重建一个新的Lua环境

伪代码:
在这里插入图片描述

20.5.2 SCRIPT EXISTS

根据输入的SHA1校验和,检查校验和对应的脚本是否存在于服务器中

伪代码:检查给定的校验和是否存在于lua_scripts字典中的键
在这里插入图片描述

20.5.3 SCRIPT LOAD

跟EVAL命令的前两步一样:为脚本创建函数,再将脚本保存到lua_scripts字典里面

完成这两步,客户端就可以使用EVALSHA命令来执行已载入的脚本了

20.5.4 SCRIPT KILL

关于处理钩子和lua-time-limit:
在这里插入图片描述
带有超时处理钩子的脚本的执行过程:
在这里插入图片描述
如果超时运行的脚本未执行过任何写入操作,那么客户端可以通过SCRIPT KILL命令来指示服务器停止执行这个脚本,给客户端返回一个错误回复;服务器可以继续运行
如果执行过写入操作,则只能使用SHUTDOWN nosave命令来停止服务器,从而防止不合法的数据被写入数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值