来源:黄健宏
浏览 724
扫码
分享
2020-01-01 20:30:44
重点回顾
- Redis 服务器在启动时,会对内嵌的 Lua 环境执行一系列修改操作,从而确保内嵌的 Lua 环境可以满足 Redis 在功能性、安全性等方面的需要。
- Redis 服务器专门使用一个伪客户端来执行 Lua 脚本中包含的 Redis 命令。
- Redis 使用脚本字典来保存所有被 EVAL 命令执行过,或者被 SCRIPT_LOAD 命令载入过的 Lua 脚本,这些脚本可以用于实现 SCRIPT_EXISTS 命令,以及实现脚本复制功能。
- EVAL 命令为客户端输入的脚本在 Lua 环境中定义一个函数,并通过调用这个函数来执行脚本。
- EVALSHA 命令通过直接调用 Lua 环境中已定义的函数来执行脚本。
- SCRIPT_FLUSH 命令会清空服务器
lua_scripts
字典中保存的脚本,并重置 Lua 环境。 - SCRIPT_EXISTS 命令接受一个或多个 SHA1 校验和为参数,并通过检查
lua_scripts
字典来确认校验和对应的脚本是否存在。 - SCRIPT_LOAD 命令接受一个 Lua 脚本为参数,为该脚本在 Lua 环境中创建函数,并将脚本保存到
lua_scripts
字典中。 - 服务器在执行脚本之前,会为 Lua 环境设置一个超时处理钩子,当脚本出现超时运行情况时,客户端可以通过向服务器发送 SCRIPT_KILL 命令来让钩子停止正在执行的脚本,或者发送 SHUTDOWN nosave 命令来让钩子关闭整个服务器。
- 主服务器复制 EVAL 、 SCRIPT_FLUSH 、 SCRIPT_LOAD 三个命令的方法和复制普通 Redis 命令一样 ——只要将相同的命令传播给从服务器就可以了。
- 主服务器在复制 EVALSHA 命令时,必须确保所有从服务器都已经载入了 EVALSHA 命令指定的 SHA1 校验和所对应的 Lua 脚本,如果不能确保这一点的话,主服务器会将 EVALSHA 命令转换成等效的 EVAL 命令,并通过传播 EVAL 命令来获得相同的脚本执行效果。
当前内容版权归
黄健宏 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问
黄健宏 .