Redis Lua 脚本调试是一种强大的工具,可以帮助您快速发现和解决Lua脚本中的问题。它允许您在运行脚本时逐步执行脚本,并检查每个步骤的结果。两种调试模式从Redis 3.2开始,内置了 Lua debugger(简称LDB),使用Lua debugger可以很方便的对我们编写的Lua脚本进行调试异步模式 --ldb开启 lua dubegger ,将会 ......
208
0
0
2024-03-26
目录概述示例C++调用lua编译lua流程运行lua调用C++解释运行调用语义概述从本质上来看,其实说是不存在所谓的C++与lua的相互调用。lua是运行在C上的,简单来说lua的代码会被编译成字节码在被C语言的语法运行。在C++调用lua时,其实是解释运行lua文件编译出来的字节码。lua调用C++其实还是解释运行lua文件编译出来的字节码的语义是调用lu ......
141
0
0
2023-09-12
在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在。 那这篇博客主要分为三部分: 、几种方式判断当前key是否存在的性能进行比较。 、Redis实现 布隆过滤器 并批量插入数据,并判断当前key值是否存在。 、针对以上做一个总结。 一、性能对比主要对以下方法进行性能测试比较: 1、List的 contains 方法 2、Map的 ......
225
0
0
2023-06-13
准确的讲,Redis 事务包含两种模式 : 事务模式 和 Lua 脚本。先说结论:Redis 的事务模式具备如下特点:保证隔离性;无法保证持久性;具备了一定的原子性,但不支持回滚;一致性的概念有分歧,假设在一致性的核心是约束的语意下,Redis 的事务可以保证一致性。但 Lua 脚本更具备实用场景,它是另一种形式的事务,他具备一定的原子性,但脚本报错的情况下 ......
261
0
0
2023-05-02
什么是限流?为什么要限流?限流,这个词其实并不陌生,在我们生活中也随处可见。做核酸时,工作人员会在核酸检测点的空地上摆放着弯弯曲曲的围栏,人们排着队左拐右拐的往前移动,其实这么做的目的就是限流!因为核酸检测的窗口是有限的,一下子进那么多人,没那么多空间让人们站下,就会造成拥挤,甚至会造成事故。所以需要限流!同样的,我们的应用程序也是类似的,任何系统它处理请求 ......
250
0
0
2023-04-26
目录一、安装LUA二、lua语法简介1、注释1)单行注释2)多行注释2、关键字3、变量1)全局变量2)局部变量4、数据类型1)Lua数组2)字符串操作5、if-else6、循环1)for循环2)while循环3)break提前退出循环7、函数三、Java中执行Lua脚本1、字符串方式2、文件方式3、Luaj概述四、Redis + Lua(EVAL命令)1、E ......
293
0
0
2023-04-09
Lua是一种嵌入式语言,这就意味着Lua并不是一个独立运行的应用,而是一个库,它可以链接到其他应用程序,将Lua的功能融入这些应用。因为能够当作库来扩展某个应用程序,所以Lua是一种嵌入式语言。同时,使用了Lua语言的程序也可以在Lua环境中注册新的函数,比如用C语言实现函数,从而增加一些无法直接用Lua语言编写的功能。因此Lua也是一种可扩展的语言。 上述 ......
308
0
0
2023-03-10
Lua语言不支持真正的多线程,即不支持共享内存的抢占式线程。原因有两个,其一是IOS C没有提供这样的功能,因此也没有可移植的方法能在Lua中实现这种机制:其二,也是更重要的原因,在于我们认为在Lua中引入多线程不是一个好主意。 多线程一般用于底层编程。像信号量和监视器这样的同步机制一般都是操作系统上下文提供的,而非应用程序提供。要查找和纠正多线程相关的bu ......
613
0
0
2023-03-10
Lua中的“数组”就是特殊方式使用的表。像lua-settable和lua-gettable这种用来操作表的通用函数,也可用于操作数组。不过,CAPI为使用整数索引的表的访问和封信提供了专门的函数。void lua_geti (lua_State *L, int index, int key); void lua_seti (lua_State *L, i ......
311
0
0
2023-03-10
函数dir会遍历目录并返回一张包含指定目录下所有内容的表。这里对dir新的实现会返回一个迭代器,每次调用这个迭代器时它都会返回一个新元素。通过这种实现,我们就能使用如下的循环来遍历目录:for fname in dir.open(".")do print(fname) end 要在C语言中遍历一个目录,我们需要用到DIR结构体。DIR的实例由open ......
361
0
0
2023-03-10
协程可以颠倒调用者和被调用者的关系,而且这种灵活性解决了软件架构中被称为“谁是老大”或者”谁拥有主循环“的问题。这正是对诸如事件驱动编程、通过构造器构建迭代器和协作式多线程等几个看上去并不相关的问题的泛化,而协程以简单和高效的方式解决了这些问题。从多线程的角度看,协程与线程类似:协程是一系列的可执行语句,拥有自己的栈、局部变量和指令指针,同时协程又与其他协程 ......
316
0
0
2023-03-03
在Lua语言中,函数是对语句和表达式进行抽象的主要方式。函数既可以用于完成某种特定任务,也可以只是进行一些计算然后返回计算结果。在前一种情况下,我们将一句函数调用视为一条语句;而在后一种情况下,我们则将函数调用视为表达式:(adsbygoogle = window.adsbygoogle || []).push({});print(8*9 , 9/8) a ......
372
0
0
2023-03-03
Lua语言中的表并不是一种数据结构,它们是其他数据结构的基础。我们可以用Lua语言中的表来实现其他语言提供的数据结构,如数组、记录、列表、队列、集合等。而且,用Lua语言中的表实现这些数据结构还很高效。(adsbygoogle = window.adsbygoogle || []).push({});在像C和Pascal这样更加传统的语言中,通常使用数组和列 ......
335
0
0
2023-03-03
反射是程序用来检查和修改其自身某些部分的能力。像Lua语言这样的动态语言支持几种反射机制:环境允许运行时观察全局变量;诸如type和pairs这样的函数允许运行时检查和遍历未知数据结构;诸如load和require这样的函数允许程序在自身中追加代码或更新代码。不过,还有很多方面仍然是缺失的:程序不能检查局部变量,开发人员不能跟踪代码的执行,函数也不知道是被谁 ......
418
0
0
2023-02-12
Lua语言使用自动内存管理。程序可以创建对象,但却没有函数来删除对象。Lua语言通过垃圾收集自动删除称为垃圾的对象,从而将程序员从内存管理的绝大部分负担中解放出来。(adsbygoogle = window.adsbygoogle || []).push({});更重要的是,将程序员从与内存管理相关的大多数Bug中解放出来。例如无效指针和内存泄露等问题。 在 ......
358
0
0
2023-02-12