Lua
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Redis中使用LUA的好处
- 减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行
- 原子操作,redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。
- 复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑
Lua安装
CentOS7默认安装的有Lua
交互环境
RedisLua整合
Eval命令
EVAL script numkeys key [key …] arg [arg …]
- script
Lua脚本程序,它会被运行在Redis服务器上下文中,这段脚本不必(也不应该)定义为一个Lua函数。
- numberkeys
用于指定键名参数的个数
- key[key…]
从EVAL的第三个参数开始算起,使用了numkeys个键(key),表示在脚本中所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量KEYS数组,用1为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)这里使用的是1个key
- arg[arg…]
可以在Lua中通过全局变量ARGV数组访问
Lua脚本中调用Redis命令
命令
- redis.call()
- redis.pcall()
区别:使用不同的方式处理执行命令所产生的错误
SCRIPT命令
- SCRIPT FLUSH :清除所有脚本缓存
- SCRIPT EXISTS :根据给定的脚本校验和,检查指定的脚本是否存在于脚本缓存
- SCRIPT LOAD :将一个脚本装入脚本缓存,返回SHA1摘要,但并不立即运行它
- SCRIPT KILL :杀死当前正在运行的脚本
EVALSHA命令
EVAL 命令要求在每次执行脚本的时候都发送一次脚本主体(script body)。
- Redis 有一个内部的缓存机制,因此它不会每次都重新编译脚本.
- 为了减少带宽的消耗, Redis 实现了 EVALSHA 命令,它的作用和 EVAL 一样,都用于对脚本求值,但它接受的第一个参数不是脚本,而是脚本的 SHA1 校验和(sum)
脚本的SHA1校验和可以使用ScriptLoad命令获得
使用方式