关于redis eval

关于redis eval

自2.6.0起可用

EVAL 和 EVALSHA 用于从版本2.6.0开始使用内置在 Redis 中的Lua解析器,用来执行一段lua脚本,对 Lua进行求值。

EVAL每次都需要将完整的lua脚本传递给redis服务器。

EVAL命令的实现

EVAL 命令的执行过程可以分为以下三个步骤:

  1. 根据客户端给定的 Lua 脚本,在 Lua 环境中定义一个 Lua函数
  2. 将客户端给定的脚本保存到 lua_scripts 字典,等待将来进一步使用
  3. 执行刚刚在 Lua 环境定义的函数,以此来执行客户端执行的 Lua 脚本。

Redisson 实现的客户端对Lua脚本进行了什么优化?

参数 : useScriptCache Default value: false

定义是否在Redis端使用Lua脚本缓存。大多数Redisson方法都是基于Lua脚本的, 打开此设置可以提高此类方法的执行速度并节省网络流量。

思路:

  1. 先把命令转换成 sha1码
  2. 然后执行一遍 “EVALSHA” 命令,监听命令返回命令
  3. 返回 “NOSCRIPT” 就是证明该 Redis服务端没有这个脚本了,执行一遍 “SCRIPT_LOAD” 命令,把脚本load进去,继续监听 “SCRIPT_LOAD” 命令的返回
  4. “SCRIPT_LOAD”命令返回成功就再发一次 “EVALSHA” 命令

生产环境中,推荐使用EVALSHA,相较于EVAL的每次发送脚本主体、浪费带宽,会更高效。这里要注意SCRIPT KILL,杀死正在运行脚本的时候,如果脚本执行过写操作了,这里会杀死失败,因为这违反了 redis lua 脚本的原子性。

大T笔记所有文章均为本人原创,转载请您注明来源,并留下原文链接地址,是对我的尊重,也是对知识的尊重,谢谢!
大T笔记 » 关于redis eval

大T笔记-我的个人互联网创业和自由职业之路

关于我 我的百宝箱
大T笔记-专注个人互联网创业和自由职业