LUA简介

Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

​ Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。 Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

使用Lua脚本的好处

  • 减少网络开销:可以将多个请求通过脚本的形式一次发送,减少网络时延和请求次数。
  • 原子性的操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
  • 代码复用:客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本来完成相同的逻辑。
  • 速度快:见 与其它语言的性能比较, 还有一个 JIT编译器可以显著地提高多数任务的性能; 对于那些仍然对性能不满意的人, 可以把关键部分使用C实现, 然后与其集成, 这样还可以享受其它方面的好处。**
  • 可以移植:只要是有ANSI C 编译器的平台都可以编译,你可以看到它可以在几乎所有的平台上运行:从 Windows 到Linux,同样Mac平台也没问题, 再到移动平台、游戏主机,甚至浏览器也可以完美使用 (翻译成JavaScript)。
  • 源码小巧:20000行C代码,可以编译进182K的可执行文件,加载快,运行快。

用法:RedisTemplate使用lua脚本

lua脚本编写

初始化和定义lua脚本使用类

@Service
public class LuaScript{@Autowiredprivate RedisTemplate redisTemplate;private DefaultRedisScript<Long> script;@PostConstructpublic void init(){script = new DefaultRedisScript<Long>();//返回值为Longscript.setResultType(Long.class);script.setScriptSource(new ResourceScriptSource(new ClassPathResource("lua/tokenCheck.lua")));}public Long tokenCheck(String gamekey,String curtime){List<String> keys = new ArrayList();keys.add(gamekey);keys.add(curtime);//script:lua脚本//KEYS[1] KEYS[2],是要操作的键,可以指定多个,在lua脚本中通过KEYS[1], KEYS[2]获取//ARGV[1] ARGV[2],参数,在lua脚本中通过ARGV[1], ARGV[2]获取Long result = (Long) redisTemplate.execute(script,keys,0,0);return result;}
}

注入并调用脚本使用类

    //lua调redisLong token = luaScript.tokenCheck(RedisKeys.TOKENS+gameid,String.valueOf(new Date().getTime()));

lua详解转载:https://baiyp.ren/Redis%E4%B9%8BLua.html

RedisTemplate使用lua脚本相关推荐

  1. redis-cli redisTemplate执行Lua脚本,解决redisTemplate.opsForSet().members获取数据问题

    解决问题-问题描述 在使用redisTemplate.opsForSet().members(key)获取key String; value Set<Entity>数据时候出现如下问题. ...

  2. redisTemplate执行lua脚本

    项目场景: 提示:redisTemplate执行lua脚本 例如:项目场景: 问题描述 提示:执行lua脚本 例如: 原因分析: 提示:这里填写问题的分析: 例如: afadf 解决方案: 提示:这里 ...

  3. Lua脚本语言快速入门手册

    学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程中经常用到的基础知识,共勉! Lua用法简述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式 ...

  4. redis原子性读写操作之LUA脚本和watch机制

    为什么80%的码农都做不了架构师?>>>    最近在开发电商平台的子系统--储值卡系统,系统核心业务涉及到金额消费以及库存控制,由于redis事务并不能保证操作的原子性,因此为了解 ...

  5. Lua脚本实现setnx命令

    /*** @author Linging* @version 1.0.0* @since 1.0*/ @Component public class RedisUtil {@Autowiredpriv ...

  6. Spring Redis中使用Lua脚本实现高并发原子操作

    1. 前言 在上一文中我对 Lua 语言的一些简单的语法及其在 Redis 中的操作进行了介绍,但是在 Java 开发中我们还需要进一步的学习才能使这种技术落地.今天就结合Spring Data Re ...

  7. 高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库

    文章目录 导读 概述 实现步骤 注解方式配置 Redis lua脚本和异步持久化功能的开发 Service层添加Redis抢红包的逻辑 Controller层新增路由方法 构造模拟数据,测试 代码 总 ...

  8. springboot中使用lua脚本+aop作限流访问案例代码

    文章目录 1.限流注解 2.redis配置 3.aop配置 4.controller层测试 拓展:Atomic类的学习 lua脚本学习 1.限流注解 @Target(ElementType.METHO ...

  9. 分布式锁之Redis6+Lua脚本实现原生分布式锁

    文章目录 简介 设计分布式锁应该考虑的东⻄ 基于Redis实现分布式锁 总结 解决解锁的原子性 代码实现 遗留⼀个问题 简介 分布式锁核⼼知识介绍和注意事项 背景 就是保证同⼀时间只有⼀个客户端可以对 ...

  10. Redis分布式锁—SETNX+Lua脚本实现篇

    前言 平时的工作中,由于生产环境中的项目是需要部署在多台服务器中的,所以经常会面临解决分布式场景下数据一致性的问题,那么就需要引入分布式锁来解决这一问题. 针对分布式锁的实现,目前比较常用的就如下几种 ...

最新文章

  1. 深度学习——Xavier初始化方法
  2. 8位无符号和8位有符号转化为更高字节类型的问题
  3. NO.7:别让异常逃离析构函数
  4. ValueError: check_hostname requires server_hostname解决方法
  5. 1230: 最小花费(spfa)
  6. 最优解法——7-3 将数组中的数逆序存放 (20 分)——10行代码AC
  7. ACPI知识学习笔记
  8. android 坐标点计算器,Android实现简易计算器
  9. SDN环境搭建(mininet,OVS,ryu安装及命令)
  10. Thinkbayes_Chapter5
  11. 前端之Angular2实战:依赖注入详解与应用
  12. storm配置:如何解决worker进程内存过小的问题
  13. 国内几大主流论坛(bbs)系统
  14. 关于 NFT 和版权的纠结真相
  15. SEO专用虚拟主机横空出世
  16. threejs炫酷金属样式龙卷风js特效
  17. 武器装备科研生产单位保密资格标准》内容试题(2017年版)( 共 331 题 )
  18. ElasticSearch中文拼音后无法高亮
  19. sql sever 树的基础查询
  20. (二)亚马孙或当当网在线电子书的购买与转换:改善C#的157个建议、改善C++的150个建议、改善JavaScript的150个建议、改善Java的151个建议

热门文章

  1. 用MarkDown写PPT
  2. Android6.0之AMS启动App下篇
  3. 三极管什么时候工作在饱和区
  4. 网络寻宝 v2.2 官网
  5. 一款万能企业邮箱,高效且实用,速看!
  6. Opencv3 core模块解析之convertTo
  7. marlab中主成分得分怎么求_数学无耻得分法,独家秘密,快点用起来
  8. mathtype 转换 matlab,MathType和Mathematica之间如何相互转换
  9. 新商用密码产品认证梳理——检测和认证机构篇
  10. ubuntu下用VirtualBox安装Windows虚拟机