首页 > 代码库 > redis lua script 相关
redis lua script 相关
脚本的执行是原子性的,当某个脚本正在运行的时候,不会有其他脚本或redis命令被执行。 这意味着运行一个缓慢的脚本并不是一个好主意,当运行脚本时,其他的客户端会认为服务器忙。
共有6个lua脚本相关的命令:
1. eval 可以对输入的脚本求值: EVAL script numkeys key [key ...] arg [arg ...]
numkeys 参数用于指定键名参数的个数,键名参数key[key...] 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
在 lua 脚本中,可以使用两个不同的函数来执行redis命令,他们分别是:
redis.call()
redis.pcall()
这两个函数的唯一区别在于它们使用不同的方式处理执行命令产生的错误。redis.call() 在执行命令的过程中发生错误时,脚本停止运行,并返回一个脚本错误,错误的输出信息会说明错误原因。redis.pcall() 在出错时不引发(raise)错误,而是返回一个带有err域的Lua表,用于表示错误。
2. eval sha可以根据脚本的sha1校验来对脚本求值,前提是校验和对应的脚本被eval执行过一次 或 被 script load载入过一次。
3. script load 将脚本载入到脚本缓存,但并不立即执行这个脚本。命令的返回值为script的sha1校验和。
4. script flush
redis保证所有被运行过的脚本都会永久保存在脚本缓存中,这意味着,当一个eval命令在一个redis实例上成功执行某个脚本之后,随后针对这个脚本的所有evalsha命令都会成执行。
刷新脚本缓存的唯一方法是显示地调用script flush,这个命令会清空运行过的所有脚本的缓存。
5. script exists
6. script kill
redis lua script 相关