Redis Lua scripts debugger使用
背景说明使用Redis开发分布式应用时,难免会遇到需要使用分布式锁来确保某一小段逻辑的原子性操作,如:当存在某个key对应的值A大于值B时,则返回false;否则A + 1。试想一下,如果用到分布式锁,是不是有点感觉像是杀鸡用宰牛刀?
由于Redis的操作都是原子性的,所以我们可以将如上所述的类似逻辑采用Lua脚本表述作为一个原子任务向redisClient提交,可以避免采用分布式锁。如脚本:
123456789101112131415161718192021local key = KEYS[1]local expire_time = tonumber(ARGV[1])local max_count = tonumber(ARGV[2])local is_key_exists = redis.call("EXISTS", key)-- 存在if is_key_exists == 1 then local key_count = redis.call("get", key) if tonumber(key_count) >= max_co ...
lua
因为决定学习开发网关kong的插件,所以需要学习lua语言,正在从Lua 菜鸟教程学习关于kong插件开发的博客 链接1发现一个很有意思的lua 模块 :openresty 的lua-resty-template 模块,提供模板渲染的功能准备在网关处进行对于token的检验工作,由于没有使用已有的oauth server 插件,所以需要自己写个额外插件 在这个插件中主要需要完成的工作是从cookie 中 提取出 token ,并以此为凭借到oauth server 进行相关检验,如果检验成功,应当返回id 以及这个token的ttl ,网关处获得id 应当 将之体现在日志里(插件逻辑处新建header,在nginx日志处自定义日志格式,指明该id或者在网关处建立与oauth server相同的用户体系,起码账户名一致,这样根据id 可以从数据库中提取出相应的consumer credential ,这样的话可以用于后续的基于用户的限流等操作)主要点在于1.Lua中进行http 操作 ,Github 源码文档 2.考虑对token进行缓存,[‘token’,’i ...
Nginx_Lua_Module扩展的安装与配置_适用于Ubuntu系统
Lua 是一个简洁、轻量、可扩展的脚本语言,也是号称性能最高的脚本语言,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本。很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。Lua原生支持的数据类型非常之少,它只提供了nil、数字(缺省是双精度浮点数,可配置)、布尔量、字符串、表、子程序、协程(coroutine)以及用户自定义数据这8种。但是其处理表和字符串的效率非常之高,加上元表的支持,开发者可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。Lua是一个动态弱类型语言,支持增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程(coroutine)支持。它还可以用于嵌入式硬件,不仅可以嵌入其他编程语言,而且可以嵌入微处理器中。
Nginx采用模块化的架构,官方版本的Nginx中大部分功能都是通过模块方式提供的,比如Http模块、Mail模块等。通过开发模块扩展Nginx,可以将Nginx打造成一个全能的应用服务器,这样可以将一些功能在前端Nginx反向代理层解决,比如登录校验、js合并、甚至数据库访问等等。
但是,Ng ...
Lua 学习 chapter28
目录
基础知识
操作表
一些简便方法
调用lua函数
回顾复习加巩固,自己应该认真地学习复习和巩固,并不是只有学习新知识是自己最重要的,而是复习和巩固才是自己最重要的,所以自己每天必须抽出一定的时间对自己的学习进行复习和巩固。
基础知识
lua可以作为配置文件来供c语言使用,例如我们来定义一个窗口的大小。
1
2
width = 200
height = 300
然后我们使用LuaAPI来指挥lua语言解析该文件,并获取width和height的值。
luaL_loadfile(lua_State *L, fname):加载文件并且编译,返回一个执行这个文件的函数,放到栈顶
lua_pcall(L,0,0,0):调用栈中的函数,第二个参数为函数参数的个数,第三个参数为返回值的个数,第四个参数为错误处理函数。在压入结果之前,pcall函数会将参数和函数出栈,将返回值从第一个按照顺序压入栈中。至于最后一个参数为零,则lua会把错误信息作为string压倒栈中,如果是函数,第四个参数为它在栈中的索引,一般这个错误处理函数应该在被压入栈且位于待调用函数之 ...
Evaluation methods for unsupervised word embeddings
本文研究了无监督词向量的评价方法。
动机
词向量的评价可分为外在评价和内在评价。外在评价将词向量运用在下游任务观察性能的提升,但只能显示出词向量的好处,无法清晰地将词向量与性能度量连接在一起。内在评价通过回答词语之间的语义关系和句法关系的询问得到。但这些数据集都是收集自过去其他领域的工作,而非精心构建,不能反映语料库的统计学特征。
故本文研究了不同评价指标之间的关系,提出了一种新的评价方法,并提出了一种模型和数据驱动的问题集构建方法。
评价方法
Absolute intrinsic evaluation
通过离线数据集的分数来评价,分为四大类型:Relatedness,词语相关性任务;Analogy,类比任务;Categorization,词语聚类任务;Selectional preference,区分一个名词对一个动词是主语还是宾语。
Comparative intrinsic evaluation
对一个词语,每个词向量模型都同时查询它的第k相似词,人为选择最优的查询结果,通过被选中的比率比较词向量的优劣。
Coherence
Extrinsic Tasks
实验的任务包括:Nou ...
lua学习笔记
使用命令行参数-i来启动lua解释器,那么解释器就会在运行完指定的程序块后进入交互模式。
12345test.luafunction ( ... ) print("foo")end
1234lua -i test.luaLua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio foo()foo
另一种运行程序块的方式是使用函数dofile,该函数会立即执行一个文件。
行注释
1-- here
块注释
1234--[[herehere--]]
类型与值在lua中有8种基础类型:nil,boolean,number,string,userdata,function,thread,table
函数type可根据一个值返回其类型名称:
1print(type(type)) -- function
lua将值false和nil视为“假”,而除此之外的其他值视为“真”。
lua提供运行时的数字与字符串的自动转换。在一个字符串上应用算数操作时,lua会尝试将这个字符串转换成一个数字:
1print("10" + 1) ...
Lua学习
轻量级嵌入式脚本语言
动态类型语言
语法数据类型
nil boolean number string userdata function thread table使用type()返回类型
Boolean
boolean和nil都被看做false
0和空串被看做true
Number
全部用浮点表示
16进制表示也可以用2进制指数方式 0x2.2p2 等于(2+2/16)*2^2
String
String不能被修改,替换其中字符后会创建一个新字符串
Lua自动处理字串内存分配问题,直接操作超长字串也OK
使用#string来查看字串长度
使用[==[....]==]来包含字面文字(Literal Text)其中=可以是0个或任意多个
使用..来连接字串
string转number:tonumber()number转string:tostring()
Table
Table是对象
变量指向Table的引用
Table存储键-值对创建Table: a={}赋值:a["x"]=10
a.x和a["x" ...
nginx+lua
1. 安装lua编译器LuaJIT#wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz#tar -xzvf LuaJIT-2.0.3.tar.gz#cd LuaJIT 2.0.3#make && make install
安装完成后配置环境变量,使nginx可找到luajit
#export LUAJIT_LIB=/usr/local/lib#export LUAJIT_INC=/usr/local/include/luajit-2.0
2. 下载lua模块,编译lua进nginx,nginx版本至少1.6.x下载lua-nginx-module点击这里下载ngx_devel_kit点击这里
#cd NGINX/NGINX-1.6.2/#./configure --add-module=/path/to/ngx_devel_kit --add-module=/path/to/lua-nginx-module-0.9.10#make && make install
启动nginx如报错(./nginx: ...
Lua远程调用的实现方法
游戏开发中,客户端、服务端之间的交互是很频繁的,尤其是逻辑玩法的实现,需要大量的交互。
如果所有的交互都按功能构建出不同的协议,这样即繁琐又不方便修改。
通过Lua,使用远程调用可以极大的方便客户端、服务器的通信。
在Lua中,通过C++告诉对方,我要调用哪个函数、传递哪些参数,来执行相关的功能。
这样就不用定义一大串协议,而只需定义一种:远程调用协议。
如果要对方执行相应的函数,需要传递以下信息:
函数名
参数
当C++获得函数名、参数后,就可以构建RPC数据包,实现远程调用了。
本文讲述如何在C++中获得Lua远程调用的函数名、参数。
例如,我想实现:
客户端登录的功能,我就可以在客户端调用位于服务端的loginreq函数。
具体的形式有如下两种:
rpc("loginreq", "username", "password")
server.loginreq("username", "password")
第一种,是直接导出一个全局函数rpc,并将函数名作为第一个参数传递过去。
第二种,是 ...
Lua学习总结
目录
总结
每个人都在犯错,只有在错误中找到自己的不足,并且去改变,这样你才能够成就一个完美的自己
总结
断断续续,慢慢悠悠,终于在不知道过了自己定的时间线多久之后,自己完成了自己给自己当初设定的目标,经历了这些之后,自己对于lua的理解深刻和明白了很多很多。在日常的开发过程中,自己每时每刻都在使用lua,但是仅仅是使用,当其变通了些之后,自己就转不过来了,所以自己还是要多观察别人的代码,来丰富和加深自己对lua的理解。
最近自己不知道在忙些什么,但是还是希望自己能够在保证自己身体健康的前提下努力的完成自己既定的任务吧。
身体是革命的本钱,但是自己现在的身体状况已经影响到了革命的状态,人生就是这样吧,只有经历过,痛苦过,才知道如何去生活,去争取,去努力,去克服,去理解,去实现,去改变。
<hr style="visibility: hidden;"/>
<hr style="visibility: hidden;"/>