![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lua
BanFS
欠的技术债,早晚要还
展开
-
redis cluster使用lua脚本的坑,非同一个slot也可以使用lua脚本
在项目中,需要用lua脚本操作redis cluster中的多个key,但是非同slot的时候会报错,例如下面test3、test6在同一个node,但是却不是同一个slot。redis使用lua脚本可以这样`redis-cli -a xxxxx--eval demo.lua key1 key2 , val1 val2`原创 2022-02-10 21:09:51 · 4339 阅读 · 1 评论 -
Ubuntu Lua调用C函数。
用了很久lua,框架原因,今天写一下lua调用so库。 真的是不做不知道,一做真奇妙。网上那么多篇文章,基本上都是你抄我,我抄你。错误都一样,验证都没验证过。。。 先声明一下我的环境,Ubuntu 18.04,lua5.31.概念补充,lua和c交互是通过一个虚拟的栈来交互的,为什么是这样?C与Lua之间通信关键内容在于一个虚拟的栈。几乎所有的调用都是对栈上的值进行操作,所有C与Lua之间的数据交换也都通过这个栈来完成。另外,也可以使用栈来保存临时变量。每一个...原创 2020-10-09 19:54:53 · 223 阅读 · 0 评论 -
Lua 表的弱引用
最近被问到一个问题,什么是lua表的弱引用,之前看过lua程序设计第四版,但是当时不记得了,并不能回答出来。之后做了简单查阅,作此记录。 lua的垃圾回收机制是,当一个变量不再被引用了。当触发垃圾回收机制的时候,会回收这部分内存。而弱引用,则是更好的回收内存的一种方法。下面上代码: 对key设置弱引用之前:local t = {}local key1 = { name = 'key1' }t[key1] = 1key1 = nilfor k,v...原创 2020-09-15 20:29:41 · 677 阅读 · 0 评论 -
C调用Lua与解决Lua环境问题
-I参数是用来指定头文件目录 (i)这个报错是说没找到这些东西,因为这些都在lualib库里,查找一下,指定一下即可。我是直接sudo cp /usr/lib/x86_64-linux-gnu/liblua5.3.so.0 . 将库拷贝到本目录,然后改名为liblua5.3.so。然后编译,运行-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名 (l)...原创 2020-08-12 15:56:32 · 687 阅读 · 0 评论 -
redis 执行lua脚本实际项目的应用。
写博客还是习惯先写一下,写下这篇博客的原因。前几天撸的博客《使用redis做排行榜相同积分情况下,如何使用到达时间来排序》,我使用了这个方法修改了原来写的排行榜,之前的排行榜我是没有这样做。修改之后,需要运营先暂停排行榜,将之前排行榜的分数记录,发奖之后再开启新的排行榜。但是策划最后说我忘记了,周四更新之后,导致旧方法记录的分数存在,同时新方法也在记录分数,排行榜就乱了,只能临时暂停排行榜,等我修复后再开启。 混乱的原因是redis中记录的分数,旧分数是实际分数,新分数为 sc...原创 2020-07-13 09:16:03 · 580 阅读 · 0 评论 -
Lua位操作
在用redis写排行榜的时候,相同积分的情况要按照到达时间排序,用到了Lua的位操作,网上很少这方面的资料,写一下做简单笔记。 lua位操作其实和c语言一样,例子如下: 结果为: 实际应用可以看看我的另一篇博客,《使用redis做排行榜相同积分情况下,如何使用到达时间来排序》...原创 2020-07-07 20:08:30 · 2524 阅读 · 0 评论 -
Lua 表的排序,table.sort应用
方法原型:table.sort (table, funtion)两个入参:1.table-----------需要排序的table 2.function-------排序方法,可自定义(如果不填,则按默认排序)1.不传排序方法,采用自定义:...原创 2020-02-28 20:27:22 · 5837 阅读 · 0 评论 -
Lua时间函数os.time()与os.data()的具体运用-------如何得知条件天数后的日期
最近的工作是要求写一个任务系统,需要在特定日期重置任务,或者在天数后重置任务。 这就延伸出一个问题,如何得知条件天数后的日期。 这个问题的难点在于,每个月的天数不一样,加上相同的天数后每个月变化后的日期怎么处理。 例如,我们要求40天后的日期 其实lua的时间函数十分强大,可以用以下方法: 1.算出当时间,以表表...原创 2019-11-17 13:19:58 · 2048 阅读 · 0 评论 -
lua中的整除与取整数
书籍是人类进步的阶梯,在没看lua程序设计第四版之前,并不知道lua有整除运算符,需要返回整除结果的时候,自己还得进行多余的运算,减去小数部分。前几天需求刚好需要用到整除和取一个浮点数的整数部分,运用之,作此记录。整除lua中“ / ”代表除法,计算结果都是存在小数的。lua5.3后还提供了一个整除的运算符“ // "。取整数lua数学库提供了三个取整函数...原创 2019-09-04 20:04:18 · 37917 阅读 · 0 评论 -
Lua for 循环
Lua语言for循环分为两大类:数值for循环、泛型for循环1.数值for循环Lua 编程语言中数值for循环语法格式:for var=exp1,exp2,exp3 do <执行体> end var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。实例:...原创 2019-04-02 17:02:46 · 11608 阅读 · 0 评论 -
Lua,pairs与ipairs区别
pairs遍历表中全部key,valueipairs 这个迭代器只能遍历所有数组下标的值,这是前提,也是和 pairs 的最根本区别,也就是说如果 ipairs 在迭代过程中是会直接跳过所有手动设定key值的变量。特别注意一点,和其他多数语言不同的地方是,迭代的下标是从1开始的。pairs实例:tab = {1, 2, 3, key1 = nil, key2 = "val2", ...原创 2019-04-02 17:31:33 · 448 阅读 · 0 评论 -
Lua逻辑运算符and,or,not
在Lua中合理使用and,or,not可提高代码效率,减少代码量,增加可读性。Lua逻辑运算符and,or,not规则如下:设定 A 的值为 true,B 的值为 false:操作符 描述 实例 and 逻辑与操作符。 若 A 为 true,则返回 B;若A为false,则返回A。 (A and B) 为 false。 or 逻辑或...原创 2019-04-15 11:56:05 · 18810 阅读 · 2 评论 -
Lua元表(__index方法个人理解)
什么是Lua元表:原表可理解为“一个方法表(类似函数表)“,里面包含了一些解决方案。当一个table设置元表之后,相当于关联了这个方法表setmetatable(table,metatable): 对指定 table 设置元表(metatable),如果元表(metatable)中存在 __metatable 键值,setmetatable 会失败。 getmetatable(table...原创 2019-04-16 11:26:29 · 5609 阅读 · 5 评论 -
Lua 协同程序
协同程序(coroutine)简介Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。线程和协同程序区别1.线程可以同时运行,协同程序却需要彼此协作的运行。2.在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起。协同程序有点类似...原创 2019-04-17 11:30:21 · 867 阅读 · 0 评论