Redis——Lua脚本

1,Redis从2.6版本开始引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端原子地执行多个redis命令。
2,创建并修改Lua环境的步骤如下:
1)创建一个基础的Lua环境,之后的所有修改都是针对这个环境进行的
2)载入多个数据库到Lua环境里面,让Lua脚本可以使用这些函数库来进行数据操作
3)创建全局表格redis,这个表格包含了对Redis进行操作的函数
4)使用Redis自制的随机函数来替换Lua原有的带有副作用的随机函数,从而避免在脚本中引入副作用
5)创建排序辅助函数,Lua环境使用这个辅助函数来对一部分Redis命令的结果进行排序,从而消除这些命令的不确定性
6)创建redis.pcall函数的错误报告辅助函数,这个函数可以提供更详细的出错信息
7)对Lua环境中的全局环境进行保护,防止用户在执行Lua脚本的过程中,将额外的全局变量添加到Lua环境中
8)将完成修改的Lua环境保存到服务器状态的Lua属性中,等待执行服务器传来的Lua脚本
3,Redis服务器创建了两个用于Lua环境进行协作的组件,他们分别是负责执行Lua脚本中的Redis命令的伪客户端,以及用于保存Lua脚本的lua_scripts字典。
因为执行redis命令必须有相应的客户端状态,所以为了执行Lua脚本中包含的Redis命令,Redis服务器专门为Lua环境创建了一个伪客户端,并由这个伪客户端负责处理Lua脚本中包含的所有Redis命令。
除了伪客户端之外,Redis服务器为Lua环境创建的另一个协作组件是lua_scripts字典,这个字典的键为某个lua脚本的SHA1校验和,而字典的值则是SHA1校验和对应的Lua脚本。
4,EVAL命令的实现
EVAL命令的执行过程可以分为以下3个步骤:
1)根据客户端给定的Lua脚本,在Lua环境中定义一个Lua函数
2)将客户端给定的脚本保存到lua_scripts字典,等待将来进一步作用
3)执行刚刚在Lua环境中定义的函数,以此来执行客户端给定的Lua脚本。
5,除了EVAL命令和EVALSHA命令之外,Redis中与Lua脚本有关的命令还有4个,它们分别是SCRIPT FLUSH命令、SCRIPT EXITS命令、SCRIPT LOAD命令、以及SCRIPT KILL命令。

  • SCRIPT FLUSH
    作用是清除服务器所有和Lua脚本有关的信息,这个命令会释放并重建lua_scripts字典,关闭现有的lua环境并重新创建一个新的lua环境
  • SCRIPT EXITS
    作用是根据输入的SHA1检验和,检查检验和对应的脚本是否存在于服务器中。
  • SCRIPT LOAD
    首先在Lua环境中为脚本创建相应的函数,然后再将脚本保存到lua_scripts字典里面
  • SCRIPT KILL
    指示服务器停止执行某个脚本
    6,与普通的redis命令一样,当服务器运行在复制模式之下,具有写性质的脚本命令也会被复制到从服务器,这些命令包括EVAL命令、SCRIPT FLUSH命令、SCRIPT LOAD命令、EVALSHA命令。前面3个命令复制的步骤和普通命令相同。
    EVALSHA命令是复制操作最复杂的一个,因为主服务器与从服务器载入Lua脚本的情况可能有所不同。必须确保EVALSHA命令要执行的脚本已经被所有从服务器载入。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值