脚本编程语言Lua基本语法

概述

Lua是一个比较小巧的编程语言,其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能(比如嵌入到Springboot中去调用脚本),这里我就不介绍Lua相关环境的安装啦~

数据类型与常用语法

注释

--单行注释
或者
--[[
 多行注释
 --]]

数据类型

Lua有8个基本类型:

  1. nil:表示一个无效值(在条件表达式中相当于false)
  2. boolean
  3. number:表示双精度类型的实浮点数
  4. string:字符串由一对双引号或单引号来表示
  5. userdata:表示任意存储在变量中的C数据结构
  6. function
  7. thread:表示执行的独立线路,用于执行协同程序
  8. table:一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

变量

Lua 变量有三种类型:全局变量、局部变量、表中的域。

Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用local显式声明为局部变量。

局部变量的作用域为从声明位置开始到所在语句块结束。

变量的默认值均为 nil。

for循环

for var=exp1,exp2,exp3 do  
    --TO DO SOMETHING  
end  
eg.Springboot内嵌的Lua脚本,调用Redis get命令循环执行50次
local key = KEYS[1]
for i = 100,1,-1 do
	redis.call('get',key)
end

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

if 和 else

--[ 0 为 true ]
if(0)
then
    print("0 为 true")
end

Lua中false和nil为假,true和非nil为真。

函数

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end
eg. 发送http Get请求
local zhttp = require "resty.http"
local function http_post_client(url, timeout)
        local httpc = zhttp.new()
 
        timeout = timeout or 30000
        httpc:set_timeout(timeout)
 
        local res, err_ = httpc:request_uri(url, {
                method = "GET",
                headers = {
                    ["Content-Type"] = "application/x-www-form-urlencoded",
                }
        })
        httpc:set_keepalive(5000, 100)
        --httpc:close()
        return res, err_
end

运算符

+、-、*、/、%、^

字符串

可用单引号、双引号以及[[ xxx ]]表示。

如何在Springboot中使用RedisTemplate调用Lua脚本

 
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private RedisTemplate<String,Object> redisTemplate1;
 
    private DefaultRedisScript<List> redisScript;
 
    @PostConstruct
    public void init(){
        redisScript = new DefaultRedisScript<List>();
        redisScript.setResultType(List.class);
        //.lua文件放到Springboot项目的resource目录下
        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("LuaScript.lua")));
    }
 
 	//将User名字存入Redis中
     @Override
    public void redisSetUser(String key, String name){
        /**
         * List设置lua的KEYS
         */
        List<String> keyList = new ArrayList();
        keyList.add(key);
		
		List<String> argvList = new ArrayList();
		argvList.add(argvList);
		 
        /**
         * 调用脚本并执行
         * 此处脚本里面编写redis.call('set',KEYS[1],ARGV[1])来存入用户名

         */
        redisTemplate1.execute(getRedisScript,keyList, argvList);
        
    }
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值