【lua】lua安装学习
一.Lua脚本介绍
Lua 是用标准C语言编写并以源代码形式开放的一种轻量小巧的脚本语言,设计目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能。由于体积小只有200多kb,可以很容易放入集成在一些软件系统里。可以为一些中间件提供支持功能,比如nginx,redis。 Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数。
Lua官网 :http://www.lua.org/
Lua官方文档:http://www.lua.org/manual/5.3/
Lua安装手册:https://www.php.cn/lua/lua-environment.html

二.Lua脚本安装
安装lua
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3..tar.gz
cd lua-5.3.
make linux test
make install
如果在make linux test 这步出现问题 lua.c:80:31: 致命错误:readline/readline.h:没有那个文件或目录
执行以下语句
解决:
yum install libreadline-dev 这个我本地不行
yum -y install readline-devel 或者
yum install readline-dev readline-devel 安装完成后 然后在执行
make linux test
make install 安装完成后 查看是否成功安装

说明已经lua已经安装成功
在查看版本

在创建一个脚本试下lua一个程序
创建一个 脚本HelloWorld.lua

里面编写
print("lua Hello World!")
然后执行

三.Lua脚本和Redis关系
Reids 2.6 版本中自带Lua 脚本功能, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点,比如使用Redis原生命令,需要从Redis中获取某个key,然后提取其中的值进行比对,如果相等就不做处理,如果不相等或者key不存在则将key设置成目标值。仅仅一个单点的compare and set操作就需要与Redis通讯两次。此外,这种分散操作无法利用Redis的原子特性,占用多次网络IO。使用Lua脚本就可以通过组合打包使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。
四.Redis中使用Lua脚本
redis中通过EVAL命令去调用Lua。
官网说明地址: http://www.redis.cn/commands/eval.html
语法:
EVAL script numkeys key [key ...] arg [arg ...]
参数说明:
- script: 参数是一段 Lua 脚本程序,是一段lua脚本字符串。
- numkeys: 用于指定键名参数的个数。
- key [key ...]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
- arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] )。
具体调用示例
127.0.0.1:> EVAL "redis.call('SET','redis-call-lua-key','redis-call-value')" 0 #redis.call是redis搭建在lua环境中默认加载的类库才有的
(nil)
127.0.0.1:> get redis-call-lua-key #查看执行成功
"redis-call-value"
上面返回nil是因为lua脚本没有返回值,redis接受不到返回值就返回nil。加上return就可以返回ok。
127.0.0.1:> EVAL "return redis.call('SET','redis-call-lua-key','redis-call-value1')"
OK
127.0.0.1:> get redis-call-lua-key
"redis-call-value1"
我们也可以在redis中缓存Lua脚本,然后下次使用时候在调用。
先看看如何缓存Lua脚本
127.0.0.1:> SCRIPT LOAD "return redis.call('SET',KEYS[1],ARGV[1])"
"cf63a54c34e159e75e5a3fe4794bb2ea636ee005"
执行缓存的Lua脚本
127.0.0.1:> EVALSHA cf63a54c34e159e75e5a3fe4794bb2ea636ee005 LuaKey1 LuaKey2 LuaValue
OK
127.0.0.1:> get LuaKey1
"LuaValue"
通过SCRIPT LOAD命令将Lua脚本命令缓存,并生成返回了一个固定长度的hash字符串,不管你的Lua脚本命令由多长,都会返回这个定长的hash字符。这样做的好处是减少网络的传输,因为redis客户端向服务器传输大段的lua脚本命令时候,这回增加网络开销,而将Lua命令缓存在redis中,客户端只需要传递这个固定长度的hash字符串来减少传输的消耗,同时脚本缓存在redis中也可以防止脚本被篡改。
【lua】lua安装学习的更多相关文章
- lua脚本之lua语言简介以及lua的安装
本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解. 一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设 ...
- 热更新(一) 之Lua语法的学习
热更新 如热更新果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载(浪费流量和时间,体验不好).热更新可以在不重新下载客户端的情况下,更新游戏的内容 ...
- lua的corroutine学习
lua的corroutine学习 function receive (prod) local status, value = coroutine.resume(prod) return value e ...
- Mac OS X 上Lua的安装方法
先在Mac OS的终端查询下本机是否已安装Lua Last login: Thu Jul 10 07:54:48 on ttys000 keshans-Mac-mini:~ keshan$ lua - ...
- tengine+lua的安装步骤
我是在Red Hat 5.8 的虚机上安装的. Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等.建议把这 ...
- Lua的安装
Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施. Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持.它可以作为一个强大.轻量的脚本语言 ...
- [译] Closures in Lua - Lua中的闭包
原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...
- [转][译] Closures in Lua - Lua中的闭包
http://www.cnblogs.com/plodsoft/p/5900270.html?utm_source=tuicool&utm_medium=referral 原文:(PDF) . ...
- python3数据分析,安装学习
python3数据分析,安装学习 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-09-26. 为了简单.安装 anaconda3 就好啦. 因为安装原版python3,用pip安装 ...
随机推荐
- 【Python3练习题 012】 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
ASCII 码表的对应值,知道 ord('a') 能将字符 'a' 转化为 ASCII 码表上对应的数值,就可以了.其中,数字 0-9 对应的码值为 48-57,大写字母 A-Z 对应 65-90,小 ...
- Windows 下面 redis 发布为服务的官方方法
除了 NSSM 之外 另外一种方式 感觉还是很好用的 redis-server --service-install redis.windows.conf --loglevel verbose 感觉也可 ...
- SQLServer2016 之后增加了索引列数的限制 从 16个列 增加到了 32个列
创建带有包含列的索引 https://docs.microsoft.com/zh-cn/sql/relational-databases/indexes/create-indexes-with-inc ...
- javaScript中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
- zabbix-2.4.5的安装配置与使用
系统最小化安装 环境: zabbix_server 12.1.1.1 zabbix_agent 12.1.1.2 zabbix_proxy 12.1.1.3 1.安装环境: ...
- MySQL系列:数据表基本操作(2)
1. 指定数据库 mysql> use portal; 2. 数据库表基本操作 2.1 查看数据表 mysql> show tables; +------------------+ | T ...
- QTP自动化测试-按行取值(win10下输入?问题)-笔记20181119
在win10下运行qtp10 所有输入汉字都会为?,在win7下可以.查询了百度.bingo没有解决问题.当前的解决办法 ,在脚本中使用DataTable取数据值,添加2行记录,一行使用汉字,一行使用 ...
- 提示“Web打印服务CLodop未安装启动”的各种原因和解决方法
旧版提示:"CLodop云打印服务(localhost本地)未安装启动!"新版提示:"Web打印服务CLodop未安装启动,点击这里下载执行安装(若此前已安装过,可点这里 ...
- 跳转语句之continue
js里面有两个跳转语句,一个是continue,一个是break.由于这两个跳转语句都是用于循环当中,因此他们也就只能用于while.for.do…while语句中,当然了,break多加一个swit ...
- 学习 Spring (十二) AOP 基本概念及特点
Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ...