lua
之前项目中用到 openresty 作为 Web Api 的开发平台, 用 openresty 很适合开发以 http 接口形式
提供的服务. openresty 可以使用 lua 进行逻辑控制,加上完备的组件driver(redis, mysql, rabbitmq 等),
只需要写业务代码将各种数据读取,加工,输出,就是充当胶水的角色.
最重要的一点是, openresty + lua 已经很好的处理并行(开多个 nginx worker即可)和并发(lua coroutine),
lua vm 已经默默的处理了阻塞的IO操作,开发人员可以用写同步代码的方式实现异步.
既然是 Web Api,自然少不了对参数的校验, validator库实现对 lua table 的校验.
把 validator.lua 文件放入 openresty 安装目录的 lualib/resty/ 下即可.
Demo
location /validator_demo {
content_by_lua_block {
local v = re ...
Lua学习
因为Moongen的需要,学习了一些Lua知识,特此总结。
现在更新到lua的模块与包。
注释字符串匹配模式以后补充。
包的加载机制和C包以后补充。
1brew install lua
注:lua的index都是从1开始的。
Lua数据类型
nil
boolean
number
string
function
userdata
thread
table
nilnil表示值无效,对于全局变量和table,nil还有删除的作用,赋值为nil之后即删除了这个值
注:不能说type(X) == nil,而要说type(X) == "nil",因为type(type(X)) == string
boolean分为true和false,而且nil的值也为false。
numberlua默认只有一种number类型:double。(默认类型可以在luacof.h中修改)
string字符串类型。
[[]]用来表示一整块字符。
..用来连接字符串。
在对一个数字字符串上进行算术操作时,Lua会尝试将这个数字字符串转成一个数字。
使用#来计算字符串,比如
12> print(#& ...
Write Redis Lua Script with ZeroBrane Studio
分享如何使用 ZeroBrane Studio 協助 Redis 的 Lua Script 開發與除錯。Lua 是一個輕量級程式語言,是在1993年被發行出來,因為體積小、啟動效能快而後很廣泛的被使用在遊戲腳本、硬體腳本語言與任何與腳本相關的場合中。其他詳細內容可以參考https://www.lua.org/使用過的 Redis 的朋友可能多多少少有聽過 Redis 在 2.6 版之後可以透過撰寫客製化的 Lua Script 來大幅增加複雜處理的效能。但看了官方的 debug 教學影片應該會直接想要放棄…撰寫 Lua Script 的難度與如何在開發時進行除錯一直都是新手朋友的一大問題,今天要跟大家分享的就是透過 ZeroBrane Studio 這套 IDE 工具來幫我一次解決 Redis Lua 開發的兩大問題!ZeroBrane StudioZeroBrane Studio 是一套輕量級的 Lua IDE 工具,具備程式碼提示、語法提醒、遠端調用、程式碼偵錯與代碼分析等功能。Setup and Install Redis Plugin目前支援 Windows , Mac 與 L ...
安装Nginx Lua环境
环境准备:
$ yum -y install pcre-devel
$ yum -y install openssl openssl-devel
下载所需文件
亦可参考官方安装指南:lua-nginx-module Installation
这是我总结的安装,供参考:
需要最新版的Nginx,LuaJIT,ngx_devel_kit,lua-nginx-module等安装文件:
Nginx
LuaJIT Lua或者LuaJIT都是可以的,但是出于性能的考虑,推荐安装LuaJIT
ngx_devel_kit
lua-nginx-module
参考命令下载:
$ curl -O http://nginx.org/download/nginx-1.10.1.tar.gz
$ curl -O http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz
$ curl -L -O https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
$ curl -L -O https:/ ...
lua中的基本概念
lua中的基本概念包括:值和类型,环境变量及全局环境变量,错误处理,元表及元方法,垃圾回收,协程等。以前从来没有看过,现在仔细的深入了解一下。文章来源,lua官方文档第二章
Lua是一个动态类型语言。也就是说值变量没有类型;只有值有。语言中没有类型定义。所有的值携带了自身类型。
Lua中的所有值是第一类的值。这是说所有的值都可以被存储在变量内,或者作为参数传递给函数,或者作为函数返回值。
有8种基本的类型:nil, boolean, number, string, function, thread, table, userdate。nil类型只有一个值,nil,这何其他所有的值不同;其常常表示缺少一个可用的值。boolean有两个值,false, true。nil, false都表达否定条件;其他值表示true。number表示整数和实数(浮点)。string代表不可变的字节序列。Lua是8-bit的字符:字符串可以包含任何8-bit的值,包括
react native 报undefined is not an object(evaluating this.state.currentPage)
之前由于项目不忙,学习了一个多月的React Native,现将遇到的问题及解决方案记录一下
在方法中使用state中的属性的时候出现这样的错误,原因是此时的this指向的对象是当前的方法而不是这个对象类
解决方法有两个:
1.绑定这个对象类
1onPress={this.onClick.bind(this)}
2.使用箭头函数
1onPress={()=>this.onClick();}
个人比较推荐第二种方式
Programming in Lua摘录
“袁承志知道若再谦逊,那就是瞧人不起,展开五行拳,发拳当胸打去。荣彩和旁观三人本来都以为他武功有独到之秘,哪知使出来的竟是武林中最寻常不过的五行拳。
敌对三人登时意存轻视,温青脸上不自禁露出失望的神色。
“荣彩心中暗喜,双拳如风,连抢三下攻势,满拟自己的大力魔爪手江南独步,三四招之间就可破去对方五行拳,那知袁承志轻描淡写的一一化解。再拆数招,荣彩暗暗吃惊,原来对方所使虽是极寻常的拳术,但每一招均是含劲不吐,意在拳先,举手抬足 之间隐含极浑厚的内力。”
——金庸《碧血剑》
Lua基础设置
#Lua
Lua 是一种轻量小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。详情参阅Lua 教程
在LIMS系统中,无需进行lua环境的安装搭建,只需在编辑器(win系统推荐notepad++)中写好再粘贴到网页中即可,甚至可以直接在网页中直接编写。
无论有没有写过Lua的经历,都推荐通读下此文章,进阶中提到的,也是期望您全部理解
##基础
###注释
两个减号是单行注释:
--自定义脚本
###标示符
Lua 标示符用于定义一个变量。标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后 加上0个或多个字母,下划线,数字(0到9)。
赋值是改变一个变量的值和改变表域的最基本的方法。
123>a = "hello" .. "world">t.n = t.n + 1>
LIMS中的自定义脚本只关注于几个结果:
预约自定义脚本只关注于can_reserv (boolean)与err_msg (string)两个变量
_can_reserv为true时,当前用户操作(添加 ...
Java中内嵌Lua脚本
Lua是一种小巧的脚本语言,如今常用于游戏开发,特别是客户端开发,基本上都是基于Lua来实现热更新,在Unity开发中更有uLua(最新版改名为toLua)这样成熟的热更框架。这里我设想用Lua+Java来实现服务器的热更,不成熟的想法,这里想尝试一下Lua和Java如何互相调用。
插件选择:假如引入第三方库,可以找到比较常用的两个选择:LuaJava和LuaJ,简单做一下对比:
第三方库
实现
特性
LuaJava
非纯Java实现,需要通过native方法调用C库,依赖于Lua 5.1
会导致JVM崩溃,不再更新,没人维护
LuaJ(LuaJavaBridge)
纯Java实现的Lua解析器,无需使用native
不会因错误导致JVM crash,支持JSR-223
LuaJava简介:Lua是支持内嵌在C程序中的,但是官方不支持Java,所以我们只能寻找第三方插件了,找到了一个LuaJava,这是一个开源项目,实现方式:LuaJava实际上就是按照Lua官方文档,把Lua的C接口通过JNI包装成Java的库。下载资源,里面是一个.dll和 一个.jar。把 ...
redis学习5 lua脚本 · 老白开发
redis内置的 Lua 解释器,可以使用lua对redis进行操作。使用脚本有以下好处:
减少网络开销:批量执行redis命令。
原子性操作:Redis也保证脚本会以原子性的方式执行:当某个脚本正在运行的时候,不会有其他脚本或Redis 命令被执行。
复用:客户端发送的脚本会永久存储在Redis中,意味着其他客户端可以复用这一脚本而不需要使用代码完成同样的逻辑。
使用
lua脚本lua是一个很容易嵌入其它语言中使用的语言。很多应用程序、游戏使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。查看lua5.1在线中文用户手册。
Eval通过redis-cli客户端单独调用Lua脚本文件,格式如下:redis-cli –eval myscript.lua [key …] arg [arg …]12345678910111213141516限制一定时间内的调用次数 KEYS[1]:key ARGV[1]:存在时长ARGV[2]:调用次数]]local times = redis.call('incr',KEYS[1])if times == 1 then ...