RedisLua脚本
Lua脚本
使用脚本可以直接在服 务器端执行 Redis 命令,一般的数据 处理操作可以直接使用 Lua 语言或者 Lua 解释器提供的函数 库来完成,不必再返回 给客户端进行处理。
所有脚本都是以事 务的形式来执行的,脚本在 执行过程中不会被其他工作打断,也不会引起任何 竞争条件,完全可以使用 Lua 脚本来代替事 务和乐观锁。
所有脚本都是可重用的,也即是 说,重复执行相同的操作 时,只要调用储存在服务器内部的脚本 缓存就可以了,不用重新 发送整个脚本,从而尽可能地 节约网络资源。
执行 Lua 脚本1EVAL script numkeys key [key ...] arg [arg ...]
script 参数是要执行的 Lua 脚本。
numkeys 是脚本要处理的数据库键的数量,之后的 key [key …] 参数指定了脚本要 处理的数据库键,被传入的键可以在脚本里面通 过访问 KEYS 数组来取得,比如 KEYS[1] 就取出第一个 输入的键,KEYS[2] 取出第二个输入的键,诸如此类。
arg [arg …] 参数指定了脚本要用到的参数,在脚本里面可以通 过 ...
Lua远程调用的实现方法
游戏开发中,客户端、服务端之间的交互是很频繁的,尤其是逻辑玩法的实现,需要大量的交互。
如果所有的交互都按功能构建出不同的协议,这样即繁琐又不方便修改。
通过Lua,使用远程调用可以极大的方便客户端、服务器的通信。
在Lua中,通过C++告诉对方,我要调用哪个函数、传递哪些参数,来执行相关的功能。
这样就不用定义一大串协议,而只需定义一种:远程调用协议。
如果要对方执行相应的函数,需要传递以下信息:
函数名
参数
当C++获得函数名、参数后,就可以构建RPC数据包,实现远程调用了。
本文讲述如何在C++中获得Lua远程调用的函数名、参数。
例如,我想实现:
客户端登录的功能,我就可以在客户端调用位于服务端的loginreq函数。
具体的形式有如下两种:
rpc("loginreq", "username", "password")
server.loginreq("username", "password")
第一种,是直接导出一个全局函数rpc,并将函数名作为第一个参数传递过去。
第二种,是 ...
tolua之wrap文件的原理与使用
每个wrap文件都是对一个c#类的包装,在lua中,通过对wrap类中的函数调用,间接的对c#实例进行操作。
wrap类文件生成和使用的总体流程
生成一个wrap文件的流程这部分主要通过分析类的反射信息完成。
wrap文件内容解析使用UnityEngine_GameObjectWrap.cs进行举例。
注册部分123456789101112131415161718192021222324252627282930313233public static void (LuaState L){ L.BeginClass(typeof(UnityEngine.GameObject), typeof(UnityEngine.Object)); L.RegFunction("CreatePrimitive", CreatePrimitive); L.RegFunction("GetComponent", GetComponent); L.RegFunction("GetComponentInChildren", GetCom ...
2.1 lua 基本语法
开始C语言之后大多数讲解语言的书籍都会以打印hello world来开始。那么,如何使用lua 打印hello world呢?
1print("hello world")
和python、golang等语言类似,执行这条语句有两种方式:
交互方式尴尬
执行lua脚本文件的方式
交互方式首先,在终端输入lua,进入交互模式
123[work@fanruo ~]$ luaLua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
输入lua后会显示一行信息,包括版本、版权信息等,随后是提示符。在提示符后输入print("hello world") 回车,就会打印hello world。
123 print("hello world")hello world
执行lua脚本文件方式将上述语句保存为hello_world.lua文件:
12#!/usr/bin/luaprint("hello world")
在命令输入如下命令:12[work@fanruo ~]$ lua hello ...
ubuntu安装wireshark报错lua
ubuntu: 16.04
打开终端,安装wireshark过程如下:123456# Add the stable official PPA.sudo add-apt-repository ppa:wireshark-dev/stable# Update the repositorysudo apt-get update# Install wiresharksudo apt-get install wireshark
我的在安装过程中卡住了一会,提示51% [正在等待报头],等了好一会,才继续了。
安装完成后,运行sudo wireshark,就可以打开界面,但是会报错:
网上查了一下,解决方法如下:123456789# fix lua errorcd /usr/share/wiresharksudo gedit init.lua# 在打开的init.lua中,找到这一行,改为true-- Set disable_lua to true to disable Lua support.disable_lua = true# 然后在终端里:sudo dpkg-reconfigure wi ...
Lua封装 [ 奔跑的蜗牛 ]
撰写于 2018-05-25
<span id="post-title-updated">修改于 2018-05-25</span>
<span id="post-title-categories">分类
<a href="/categories/高级Lua/">高级Lua</a>
</span>
<span id="post-title-tags">
标签
<a href="/tags/Lua/">Lua</a>
</span>
</p>
<p>lua本身是不具有OO的特性,但是里面有一些特殊性东西可以帮助lua实现OO,例如可以巧妙的使用metatable,实现继承;lua的底层 ...
Linux lua及依赖库安装
lua5.2暂时不使用,使用lua5.1+luarocks
看readline软件包是否安装(dpkg -l | grep -i 软件名)
是否安装ncurses安装包(ncurses安装包 )
是否安装libncurses5-dev 或libncursesw5-dev软件包(apt-get install libncurses5-dev)
ncurses-5.9.tar.gz$ ./configure
$ make
$ sudo make install
readline-6.3.tar.gz$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
lua-5.2.3.tar.gz$ sudo apt-get install libreadline6-dev
$ sudo apt-get install libreadline6-dbg
$ make linux
$ OK
lua-cjson$ vim Makefile
LUA_VERSION = 5.2
$ make
$ sudo make install
lua ...
TypeEvaluator 和 TimeInterpolator
本文看看 TypeEvaluator 和 TimeInterpolator 的源码。
首先来看一下ChoreographerAndroid系统从4.1(API 16)开始加入 Choreographer 这个类来控制同步处理输入(Input)、动画(Animation)、绘制(Draw)三个UI操作。其实UI显示的时候每一帧要完成的事情只有这三种。Choreographer接收显示系统的时间脉冲(垂直同步信号-VSync信号),在下一个frame渲染时控制执行这些操作。Choreographer中文翻译过来是”舞蹈指挥”,字面上的意思就是优雅地指挥以上三个UI操作一起跳一支舞。这个词可以概括这个类的工作,如果android系统是一场芭蕾舞,他就是Android UI显示这出精彩舞剧的编舞,指挥台上的演员们相互合作,精彩演出。
而属性动画的每一帧数据计算就来自于 Choreographer .
看一下 TypeEvaluator:TypeEvaluator 为类型估值器,它根据当前已执行时间占总时间的比值来计算新的属性值。
12345678910111213141516171819202 ...
TeX的家族:LaTeX, pdfTeX, XeTeX, LuaTeX和ConTeXt
最近这段时间一直在研究LaTeX,但是一直被各种各样的词汇搞到晕头转向,后来找到了两篇文章,文章中对于各种名词的解释比较到位,并从TeX的发展讲解了整个历史,其中一个作者更是绘制出了整个家族树,对于理解TeX的历史很有帮助,奈何两篇文章都是英文,这么好的文章应该分享给国内的朋友们,同时也为了回忆一下自己之前学的英语,这里翻译了其中的一篇文章,如果有错误,还望大家原谅ShareLaTeX刚刚支持了pdflatex,latex和xelatex编译环境,你知道这些都是什么意思吗?请往下看。LaTeX的故事可以追溯到1978年,高德纳( Donald Knuth)第一次觉察到需要有一套高质量的排版系统。那时他构建的排版系统为后来LaTeX的质量提供了良好的保障。虽然近几十年来很多的功能被添加了进去,但是直到今天,它仍然是最好的排版工具。事实上,LaTeX就是在高德纳原生系统中添加功能而发展来的,那个原生系统叫做TeX。
原生TeX原生的TeX衍生出了一个庞大的工具家族,当你第一次去了解这个家族时,你看到的是LaTeX, pdfTeX, XeLaTeX, LuaTeX和ConTeXt等等这些让人 ...
redis lua脚本实践
redis lua简介Lua 脚本功能是Reids2.6版本的最大亮点, 通过内嵌对Lua环境的支持,Redis解决了长久以来不能高效地处理CAS(check-and-set)命令的缺点,并且可以通过组合使用多个命令,轻松实现以前很难实现或者不能高效实现的模式。
基本命令EVAL与EVALSHA通过内置的Lua解释器,可以使用EVAL命令对Lua脚本进行求值。
script参数是一段Lua 5.1脚本程序,它会被运行在Redis服务器上下文中,这段脚本不必(也不应该)定义为一个Lua函数。
numkeys 参数用于指定键名参数的个数。
键名参数 key [key …] 从EVAL的第三个参数开始算起,表示在脚本中所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量KEYS数组用1为起始所有的形式访问(KEYS[1],KEYS[2],以此类推)。在命令的最后是那些不是键名参数的附加参数 arg [arg …],可以在Lua中通过全局变量ARGV数组访问,访问的形式和KEYS变量类似(ARGV[1],ARGV[2],诸如此类)。
EVAL命令要求你在每次执行脚本的 ...