在Redis中使用Lua

来源:互联网 发布:河北秦淮数据有限公司 编辑:程序博客网 时间:2024/05/18 03:01

在Redis中使用Lua

一.Lua是什么?

Lua是一门脚本语言,它是由C语言实现的。其设计目标是做为嵌入式程序移植到其他应用程序。Redis将Lua做为脚本语言可以帮助开发者定制自己的Redis命令。

二. 数据类型

Lua支持strings(字符串),numbers(数值),tables(表格),booleans(布尔)

三. 在Redis中使用Lua

3.1 eval

3.2 evalsha

四. Redis中使用lua的好处

(1)lua脚本式在redis中原子执行的,在执行过程中不会插入其他命令

(2)lua脚本可以帮助开发和运维人员创造出自己定制的命令,并可以将这些命令常驻在Redis内存中,实现复用的效果。

(3)lua脚本可以将多条命令一次性打包,有效的减少网络开销。

五. Redis如何管理Lua脚本

5.1 将lua脚本加载到内存中script load “$(文件名)”

例如:script load $(test.lua)

返回:a25260dd66ce02462c5b5231 727b2f7772c0bcc5

5.2 检查lua脚本是否已经加载到内存中script exists

例如:script exists a25260dd66ce02462c5b5231 727b2f7772c0bcc5

返回:1

5.3 清除Redis内存中已经加载的所有lua脚本script flush

5.4 杀掉正在执行的lua脚本script kill|shutdown save

如果一个脚本比较耗时,会阻塞了redis。直到脚本执行完毕或则外部干预将其结束。

Redis提供了一个lua-time-limit参数,默认是5秒,它是lua脚本的超时时间,这个超时时间仅仅是当lua脚本超过lua-time-limit后,向其他调用放发送busy信号,并不会停止服务端和客户端的脚本执行。客户端会收到“Busy Redis is busy running a script”错误,并提示使用script kill和shutdownnosave命令来杀掉这个busy的脚本