• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Redis和LUA语言(一)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Redis事务中,提到在关注原子性的问题上,一般推荐使用LUA语言,而不是Redis事务,并且在Redis+Lua抢红包应用中,我们也简单使用过LUA语言,这里我们就来详细介绍下LUA的语法及运用。


在Redis的官网上同样也是建议使用LUA语言的,而且官网上还提供了一个youtube上面的****教你如何进行Debug操作,可见 https://redis.io/topics/ldb


LUA脚本语言是C开发的,在Redis使用使用LUA语言,可以减少网络开销,提供原子操作,以及代码的复用性。对lua语言感兴趣的话,可以查看其官网 http://www.lua.org/


现在我们就来看一看LUA脚本语言是如何使用的,这里我们可以先来看一看Redis+Lua抢红包应用,其中我们就是简单的在Java程序中,拼接了一段LUA语言的字符串,然后有 eval 来执行,如下:

那么这里我们就来介绍一下 eval 的使用,如下:

eval script numkeys key [key ...] arg [arg ...]

其中eval的语法格式,如下:

  1. script:      lua脚本
  2. numkeys:    key的个数
  3. key:      redis中各种数据结构的替代符号
  4. arg:      你的自定义参数

下面我们就来看一个eval的官方小示例:

第一个参数的字符串就是script,也就是lua脚本。2表示keys的个数,KEYS[1] 就是 username的占位符, KEYS[2]就是age的占位符,ARGV[1]就是jack的占位符,ARGV[2]就是20的占位符,以此类推… ,所以最后的结果应该就是:return {username age jack 20}


其实和Redis+Lua抢红包应用中类似,都是在一段lua脚本中,传入key的个数,以及各个key的参数值,这里还可以传入一些自定义参数args,args自定义参数个数不计入numkeys中。




上述我们简单的了解了下LUA语言eval的使用,但是我们会发现我们上述测试的代码还好较短,不过像Redis+Lua抢红包应用中的lua脚本稍微复杂一些,我们直接在Java程序中进行拼接使用,肯定是不太方便的。


所以通常情况下我们都是把lua script放到一个 .lua文件中,然后执行这个lua脚本,如下:


其内容都是一样的,然后我们就可以通过下面命令执行,这种方式和前面介绍的不一样,参数--eval script key1 key2 , arg1 arg2 这种模式,key和arg用一个逗号隔开就好了(注意:逗号前后需要有空格)




下面我们就来看几个小例子,通过小示例来了解LUA语言的基本语法,如下:

  1. 0~100求和


    看到上述结果为5050,正确,至于返回值还有一个(nil),是因为我们上述lua脚本是没有返回值的。

  1. 对数组进行相关操作


    上述就是分别对应的测试结果,至于最后(nil)原因和上述介绍的一致,即lua脚本是没有返回值的,另外测试2和上述其实是一样的,不过上述采用了while循环,这里采用了for循环

  1. 通过lua脚本获取指定的key的List中的所有数据


  1. 根据外面传过来的ARGV做“集合校验”


  1. 找到hash中age小于指定值的所有数据


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua根据指定字符拆分table字符串(转载)发布时间:2022-07-22
下一篇:
用VS2010编译LUA静态库发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap