Redis命令的原子执行:Lua脚本的支持

  • Redis2.6版本引入对Lua脚本的支持,可以在Redis客户端使用Lua脚本指定多个Redis命令,然后直接在服务端原子地执行这多个Redis命令。

  • 执行命令为:EVAL或者EVALSHA,如下:

    127.0.0.1:6379> EVAL "return redis.call('DBSIZE')" 0
    (integer) 94716
    
  • lua脚本相关的其他命令:SCRIPT FLUSH/EXISTS/LOAD/KILL

  • Redis对lua支持的内部实现:lua使用Redis提供的redis.call, redis.pcall来执行Redis命令,如上面的例子。在Redis内部集成了一个lua环境,在lua环境中包含一个Redis伪客户端用于执行Redis命令。lua脚本将redis.call或redis.pcall中包含的命令发送给这个伪客户端,伪客户端将命令传给命令执行器执行该命令。

  • EVAL命令内部实现:为脚本创建函数,将脚本保存到lua_scripts脚本字典中,执行该函数从而来执行脚本。

你可能感兴趣的:(Redis)