展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Java生态/Redis中怎么使用Lua脚本

Java生态/Redis中怎么使用Lua脚本

Redis Assistant
Redis Assistant

Redis Assistant 是一款为Redis设计的高效可视化管理与监控工具,提供多种操作模式,高效处理服务器数据。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

¥19
Windows/macOS/Linux 2026-08-22
正版软件 Windows macOS软件 Linux 数据库管理工具
立即下载

一、安装LUAMac上安装LUA很简单,直接使用brew相关命令;brewinstalllua使用lua-v命令可以看到lua已经安装完毕。1)简单使用创建一个test.lua文件,内容为:执行命令:luatest.lua输出为:二、lua语法简介Lua提供了交互式编程和脚本式编程:交互式编程:直接在命令行中输入语法,可以立即执行并查看到执行效果。脚本是编程:编写脚本文件,然后再执行。1、注释lua提供两种注释方式:单行注释和多行注释1)单行注释使用两个减号;--2)多行注释--[[多行注释多行注释--]

本文目录

    一、安装LUA

    Mac上安装LUA很简单,直接使用brew相关命令;

    brew install lua

    Java生态/Redis中怎么使用Lua脚本

    使用lua -v命令可以看到lua已经安装完毕。

    1)简单使用

    创建一个test.lua文件,内容为:

    Java生态/Redis中怎么使用Lua脚本

    执行命令:

    lua test.lua

    输出为:

    Java生态/Redis中怎么使用Lua脚本

    二、lua语法简介

    Lua 提供了交互式编程和脚本式编程:

    • 交互式编程:直接在命令行中输入语法,可以立即执行并查看到执行效果。

    • 脚本是编程:编写脚本文件,然后再执行。

    1、注释

    lua提供两种注释方式:单行注释和多行注释

    1)单行注释

    使用两个减号;

    --

    2)多行注释
    --[[
     多行注释
     多行注释
     --]]

    2、关键字

    下列为 Lua 的保留关键字,和Java一样 保留关键字不能作为常量或变量。

    Java生态/Redis中怎么使用Lua脚本

    3、变量

    默认的情况下,定义一个变量都是全局变量;如果要用局部变量 需要声明为local;

    1)全局变量

    全局变量不需要声明,给一个变量赋值后便创建了这个全局变量;

    访问一个没有初始化的全局变量也不会出错,只不过会得到结果:nil

    Java生态/Redis中怎么使用Lua脚本

    想删除一个全局变量,只需要将变量赋值为nil;换言之,当且仅当一个变量不等于nil时,这个变量存在。

    Java生态/Redis中怎么使用Lua脚本

    此外,一般以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于 Lua 内部全局变量。

    2)局部变量
    -- 局部变量赋值
    local b=2

    4、数据类型

    Lua 是一个动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。

    Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

    Java生态/Redis中怎么使用Lua脚本

    1)Lua数组

    在Lua 数组中,索引值是从 1 开始,可以指定为从 0 开始。

    Java生态/Redis中怎么使用Lua脚本

    2)字符串操作
    • .. 连接两个字符串;

    • string.sub() 用于截取字符串;

    string.sub(s, i [, j])
    • s:要截取的字符串;

    • i:截取开始位置;

    • j:截取结束位置,默认为 -1,最后一个字符;

    string.find() 用于字符串查找

    string.find (str, substr, [init, [plain]])
    • 在一个指定的目标字符串 str 中搜索指定的内容 substr,如果找到了一个匹配的子串,就会返回这个子串的起始索引和结束索引,不存在则返回 nil。

    • init 指定了搜索的起始位置,默认为 1,可以一个负数,表示从后往前数的字符个数。

    • plain 表示是否使用简单模式,默认为 false,true 只做简单的查找子串的操作,false 表示使用正则模式匹配。

    5、if-else

    条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。

    整体的if-else结构和我们使用的高级语言(Java、GO)类似,区别在于:LUA中的if()表达式满足之后想要做一些其余逻辑,需要紧跟then,并且流程控制以end结尾。

    if(xxx) then
        print("xxx")
    else if(xx) then
        print("xx")
    else
       print("x")
    end

    6、循环

    1)for循环

    Lua 编程语言中 for语句有两大类:数组for循环、泛型for循环

    1> 数组for循环

    语法格式:

    for var=exp1,exp2,exp3 do  
        <执行体>  
    end

    var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。

    Java生态/Redis中怎么使用Lua脚本

    2> 泛型for循环

    通过一个迭代器函数来遍历所有值,类似 java 中的 foreach 语句;

    语法格式:

    --打印数组a的所有值  
    a = {"one", "two", "three"}
    for i, v in ipairs(a) do
        print(i, v)
    end
    • i 是数组索引值,v 是对应索引的数组元素值。

    • ipairs是Lua提供的一个迭代器函数,用来迭代数组。

    Java生态/Redis中怎么使用Lua脚本

    2)while循环

    while 循环语句在判断条件为 true 时会重复执行循环体语句。

    语法格式:

    while(condition)
    do
       statements
    end
    • statements(循环体语句) 可以是一条或多条语句,condition(条件) 可以是任意表达式;

    • 在 condition(条件) 为 true 时执行循环体语句。

    Java生态/Redis中怎么使用Lua脚本

    3)break提前退出循环

    和Java中的break一个作用,用于退出当前循环或语句;

    7、函数

    在Lua中,函数是对语句和表达式进行抽象的主要方法。类似于Java中的方法。

    Lua 函数主要有两种用途:

    • 完成指定的任务,这种情况下函数作为调用语句使用;

    • 计算并返回值,这种情况下函数作为赋值语句的表达式使用;

    函数的编写方式如下:

    --[[ 函数返回两个值的最大值 --]]
    function max(num1, num2)
       if (num1 > num2) then
          result = num1;
       else
          result = num2;
       end
       return result; 
    end
    -- 调用函数
    print("两值比较最大值为 ",max(10,4))
    print("两值比较最大值为 ",max(5,6))

    Java生态/Redis中怎么使用Lua脚本

    三、Java中执行Lua脚本

    Java中执行Lua脚本有两种方式:字符串的方式、文件的方式;

    Java中想要执行LUA脚本,首先需要在pom中引入相关依赖:

    
        org.luaj
        luaj-jse
        3.0.1
    

    1、字符串方式

    对于简单的lua脚本,可以直接用java字符串写;

    package com.saint.base.lua;
    
    import org.luaj.vm2.Globals;
    import org.luaj.vm2.LuaValue;
    import org.luaj.vm2.lib.jse.JsePlatform;
    
    public class LuaString {
        public static void main(String[] args) {
            String luaStr = "print 'Saint is best man'";
            Globals globals = JsePlatform.standardGlobals();
            LuaValue luaValue = globals.load(luaStr);
            luaValue.call();
        }
    }

    控制台输出:

    Java生态/Redis中怎么使用Lua脚本

    2、文件方式

    对于一些比较常用的、复杂的脚本可以选择存放在文件中,在Java中再调用lua文件;

    package com.saint.base.lua;
    
    import org.luaj.vm2.Globals;
    import org.luaj.vm2.LuaValue;
    import org.luaj.vm2.lib.jse.JsePlatform;
    
    import java.io.FileNotFoundException;
    
    public class LuaFile {
        public static void main(String[] args) throws FileNotFoundException {
            // lua脚本的文件路径
            String luaPath = "/xxxx/javaTest.lua";
            Globals globals = JsePlatform.standardGlobals();
            //加载脚本文件login.lua,并编译
            globals.loadfile(luaPath).call();
            LuaValue func1 = globals.get(LuaValue.valueOf("print1"));
            func1.call();
    
            LuaValue func2 = globals.get(LuaValue.valueOf("print2"));
            String luaResp = func2.call(LuaValue.valueOf("saint-input-param")).toString();
            System.out.println("lua file return is : " + luaResp);
        }
    }

    lua脚本文件:

    Java生态/Redis中怎么使用Lua脚本

    控制台输出:

    Java生态/Redis中怎么使用Lua脚本

    3、Luaj概述

    Luaj在包装执行具体的Lua代码时, 有三种不同的模式;

    • 纯脚本解析执行(不选用任何Compiler)

    • To Lua字节码(LuaC, lua-to-lua-bytecode compiler)(默认选用)

    • To Java字节码(LuaJC, lua-to-java-bytecode compiler)

    Luaj中的Globals对象不是线程安全的, 因此最佳实践是每个线程一个Globals对象。

    事实上, 可以采用ThreadLocal的方式来存储该对象。

    2)性能问题

    Lua脚本在JAVA中运行,相比于直接运行Java代码会慢很多,大约1000倍。

    四、Redis + Lua(EVAL命令)

    在使用Redisson、Jedis+Lua时,我们可以通过redis客户端集成的、手写的LUA脚本来保证一系列命令在Redis中可以"原子执行"。

    在redis执行lua脚本时,相当于一个redis级别的锁,不能执行其他操作,类似于原子操作,这也是redisson实现的一个关键点。

    比如Redisson中的lua脚本:

    Java生态/Redis中怎么使用Lua脚本

    Redisson如何实现分布式锁,可以看文章:https://www.yisu.com/article/277312.htm

    lua脚本中有如下几个概念:

    • redis.call():执行redis命令。

    • KEYS[n]:指脚本中第n个参数,比如KEYS[1]指脚本中的第一个参数。

    • ARGV[n]:指脚本中第n个参数的值,比如ARGV[1]指脚本中的第一个参数的值。

    • 返回值中nil与false同一个意思。

    1、EVAL命令

    redis2.6.0版本起 采用内置的Lua解释器 通过EVAL命令去执行脚本;

    redis中的EVAL命令可以用于执行一段lua代码。命令格式如下:

    Java生态/Redis中怎么使用Lua脚本

    • 第一个参数script:表示lua脚本的内容;

    • 第二参数numkeys:表示有多少个键值对。

    • 其余参数:先把numkeys个key列出来,再把numkeys个arg列出来。

    Lua脚本中可以使用2个函数调用redis命令;

    • redis.call()

    • redis.pcall()

    redis.call()与redis.pcall()相似,二者唯一不同之处:

    • 如果执行的redis命令执行失败,redis.call()将产生一个Lua error,从而迫使EVAL命令返回一个错误给命令的调用者;

    • 然而redis.pcall()将会捕捉这个错误,并返回代表这个错误的Lua表。

    有那么一段逻辑;

    • 如果Redis某个key的整数值 和 某个value相等,则将key对应的整数值 + 1000;否则将key的值设置为9999;

    lua脚本执行命令如下:

    EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('INCRBY', KEYS[1], 1000); else redis.call('set', KEYS[1], 9999); return nil; end;" 1 test 100

    根据test值的不同,不同的执行结果如下:

    Java生态/Redis中怎么使用Lua脚本

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    Beamer 4 macOS版
    Beamer 4 macOS版

    Beamer 4是面向macOS的本地视频投屏工具,可将Mac中的影片投放到Apple TV、Chromecast及兼容设备,支持常见格式、多类字幕、环绕声、播放列表和电视遥控操作。

    Boom 3D macOS版
    Boom 3D macOS版

    Boom 3D macOS版是一款系统级音效增强工具,可为音乐、电影、游戏和流媒体提供3D虚拟环绕声、31段均衡器、音量增强及应用独立音量控制,并支持本地播放器与多种音频输出设备。

    Boris FX macOS版
    Boris FX macOS版

    Boris FX macOS版是一套面向剪辑、合成、调色及动态图形工作的专业后期工具,涵盖视觉特效、平面与三维跟踪、转描、画面修复、粒子动画和音频清理,可配合多种主流宿主软件使用。

    Capto macOS版
    Capto macOS版

    Capto 是面向 macOS 的屏幕截图、高清录屏与媒体编辑工具,支持区域及整屏捕获、网页长截图、双音轨处理、图片和视频标注、素材分类与多渠道分享,适合教师、学生、内容创作者及需要制作演示教程的用户。

    ChemDraw macOS版
    ChemDraw macOS版

    ChemDraw macOS版是一款面向化学学习、科研和制药工作的专业结构绘图工具,可创建分子、反应及生物聚合物图形,并提供结构整理、格式转换和科研成果展示能力。

    Cursor Crane macOS版
    Cursor Crane macOS版

    Cursor Crane 是一款仅面向 macOS 的键盘操控效率工具,可通过提示标签、网格、文字查找和窗口模式完成点击、滚动、定位与切换,并支持屏幕内容提取、脚本及工作流扩展。

    Deep Freeze 冰点还原 macOS版
    Deep Freeze 冰点还原 macOS版

    Deep Freeze 冰点还原 macOS版通过冻结系统配置,让受保护的Mac在重新启动后回到预设状态,并提供解冻空间、维护计划、密码保护及Apple Remote Desktop管理能力。

    Focusky macOS版
    Focusky macOS版

    Focusky macOS版是一款面向教学课件、商务汇报、产品展示和动画宣传内容的演示制作工具。它通过无限画布、路径编排、缩放旋转转场及多媒体编辑,将传统逐页幻灯片转化为更具空间感的动态演示。

    Folder Colorizer 2 macOS版
    Folder Colorizer 2 macOS版

    Folder Colorizer 2 macOS版是一款直观的文件夹外观定制工具,可更换颜色,添加表情、贴纸及图片背景,并支持批量处理、智能推荐和恢复默认样式,帮助用户更快辨认工作、学习与生活资料。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。

    AlwaysUp Windows版
    AlwaysUp Windows版

    AlwaysUp是一款面向Windows的系统服务注册与程序托管工具,可让普通应用、脚本及批处理在无人登录时随系统启动,并通过状态检测、异常重启、资源监控和邮件通知保障关键任务持续运行。

    AnyDesk Windows版
    AnyDesk Windows版

    AnyDesk Windows版是一款轻量化远程桌面与技术支持工具,可用于控制异地电脑、传输文件、远程打印及无人值守访问。它兼顾连接响应、安全权限和部署灵活性,适合个人远程办公、企业设备维护与客服支持。

    Boom 3D Windows版
    Boom 3D Windows版

    Boom 3D Windows版是一款面向音乐、电影和游戏场景的系统级音效增强工具,支持虚拟3D环绕声、31段均衡器、预设音效、应用音量控制及本地音乐播放,可配合耳机、扬声器和蓝牙耳机使用。

    Boris FX Windows版
    Boris FX Windows版

    Boris FX Windows版是一套服务于影视剪辑、视觉特效、运动跟踪、转描、图像修饰及音频修复的专业创作工具集合,可作为插件接入多种主流后期宿主,也包含可独立运行的应用,适合剪辑师、特效师与内容创作者使用。

    ChemDraw Windows版
    ChemDraw Windows版

    ChemDraw Windows版是一款面向化学研究、药物研发、材料科学和教学工作的专业结构绘图工具,可快速绘制分子、反应式及生物聚合物,并提供结构整理、格式转换、性质计算和科研文档协作能力。

    CODESOFT Windows版
    CODESOFT Windows版

    CODESOFT Windows版是一套企业级条码与RFID标签设计打印工具,可连接Excel、Access、SQL及云端数据源,支持变量、表单、GS1条码、数据库记录和多种工业打印机,适合制造、仓储、物流及合规标识场景。

    Deep Freeze 冰点还原 Windows版
    Deep Freeze 冰点还原 Windows版

    Deep Freeze 冰点还原 Windows版通过重启恢复技术保护系统盘及指定分区,自动撤销恶意程序、误操作和配置漂移造成的改动,并支持密码保护、解冻空间与多硬盘管理,适合学校机房、公共电脑、办公终端及家庭电脑使用。

    EDIUS Windows版
    EDIUS Windows版

    EDIUS 11 Windows版是一款面向影视制作、广播电视、纪录片、短视频及教育机构的专业非线性编辑工具,支持4K/8K、多格式混编、HDR调色、字幕、音频处理和后台渲染,并提供素材管理及丰富的导出预设。

    FastStone Capture Windows版
    FastStone Capture Windows版

    FastStone Capture Windows版是一款轻量级屏幕捕捉、录屏与图像编辑工具,可截取窗口、区域、菜单和滚动页面,并提供标注、模糊、取色、OCR、录音录像及多格式导出能力,适合办公说明、教程制作和问题反馈。

    Focusky Windows版
    Focusky Windows版

    Focusky Windows版是一款动画演示与交互课件制作工具,通过无限画布、缩放旋转镜头、模板素材和对象动画组织内容,可导入PPTX,并输出视频、EXE、PDF、网页等格式,适用于课堂教学、微课、商务汇报及产品展示。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?