redis+lua脚本
1.lua+java
第一种形式直接在代码中
@Autowiredprivate RedisTemplate<String,String> redisTemplate;@PostMapping("/test")public Response test() {String lua = "redis.call ('set', KEYS[1], ARGV[1]) "+ " local str1 = redis.call ('get', KEYS [1]) "+ " return str1 ";DefaultRedisScript<String> rs = new DefaultRedisScript<>(lua, String.class);String res =(String) redisTemplate.execute(rs,Arrays.asList("test"),"123456");return Response.ok(res);}
第二种形式放在配置文件中
@PostMapping("/test")public Response test() {DefaultRedisScript<String> rs = new DefaultRedisScript<>();rs.setScriptSource(new ResourceScriptSource(new ClassPathResource("lua/hSet.lua")));rs.setResultType(String.class);/*** 1.过期时间要变成字符串,时间为秒* 2.FIELD 字段不能放到key中,不然会报错* (error) CROSSSLOT Keys in request don't hash to the same slot*/redisTemplate.execute(rs,Arrays.asList("hashMapTest"),"app","12345689","130");return Response.ok(1);}
redis.call('HSET', KEYS[1],ARGV[1],ARGV[2])
redis.call('EXPIRE', KEYS[1],ARGV[3])
2.纯lua脚本
下面是通过Lua脚本来查找redis 中hash类型中有空值的数据。
eval "local keys=redis.call('keys','*'); local kP={}; local y='';for i=1,#keys do local b=redis.call('TYPE',keys[i]); for g,h in pairs(b) do if(h=='hash') then kP[i]=keys[i] else kP[i]=0 end ; end end for i,v in pairs(kP) do if(v~=0 and (redis.call('HEXISTS',v,'null')==1)) then y=y..' '..v end end ;return y" 0
格式化后
local keys=redis.call('keys','*');
local kP={}; local y='';
for i=1,#keys do local b=redis.call('TYPE',keys[i]); for g,h in pairs(b) do if(h=='hash') then kP[i]=keys[i] else kP[i]=0 end ;end end for i,v in pairs(kP) do if(v~=0 and(redis.call('HEXISTS',v,'null')==1)) then y=y..' '..v end end ;
return y
1.在判断key是什么类型数据时遇到坑,不能直接判断redis.call(‘TYPE’,keys[i])=‘hash’,因为它返回的是ok和hash。
参考
https://blog.csdn.net/weixin_43603149/article/details/107262478
redis+lua脚本相关推荐
- Redis Lua脚本中学教程(下)
在中学教程的上半部分我们介绍了Redis Lua相关的命令,没有看过或者忘记的同学可以步行前往直接使用机票Redis Lua脚本中学教程(上).今天我们来简单学习一下Lua的语法. 在介绍Lua语法之 ...
- 高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库
文章目录 导读 概述 实现步骤 注解方式配置 Redis lua脚本和异步持久化功能的开发 Service层添加Redis抢红包的逻辑 Controller层新增路由方法 构造模拟数据,测试 代码 总 ...
- Redis Lua脚本大学教程
前面我们已经把Redis Lua相关的基础都介绍过了,如果你可以编写一些简单的Lua脚本,恭喜你已经可以从Lua中学毕业了. 在大学课程中,我们主要学习Lua脚本调试和Redis中Lua执行原理两部分 ...
- 一网打尽Redis Lua脚本并发原子组合操作
1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算.Redis 提供了丰富的命令来供我们使用以实现一 ...
- Redis Lua脚本的详细介绍以及使用入门
Redis Lua脚本的详细介绍以及使用入门. 文章目录 Redis Lua脚本的引入 开源软件的可扩展性 Redis的扩展性脚本 Redis Lua脚本的基本使用 通过EVAL命令执行Lua脚本 通 ...
- Redis Lua 脚本常用操作总结及实现 CAS 操作
一.什么是 Lua ? Lua 是一个小巧的脚本语言.它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由 R ...
- 深入分析 Redis Lua 脚本运行原理
Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向服务器发送 lua 脚本来执 ...
- Redis Lua脚本实现原子性操作
一.简介 redis操作时单线程的,平常如果想要redis原子性操作的话,可以使用incrBy()和decrBy()方法进行原子性的加减,但是对于事务性的逻辑操作,没有办法实现原子性,Redis 使用 ...
- Redis Lua脚本中学教程(上)
失踪人口回来啦! 有读者问我为什么这么久都没有出Redis Lua中学教程,表示村头厕所已经好久没有纸了.其实我早就要写这篇中学教程了,奈何最近太忙了,就一拖再拖,直到今天我终于又开始动笔了.忘记Lu ...
- 修改器内置脚本编写_Node.js 中实践 Redis Lua 脚本
对别人的意见要表示尊重.千万别说:"你错了."--卡耐基 Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提 ...
最新文章
- 17 博客后台富文本编辑
- Excel VBA两两个体距离矩阵转化为数据库格式
- 数据预处理+缺失值处理方案+Missing Value+pandas+缺失值填充方法、方案
- SQL Server 2005 Express附加(Attach)的数据库为“只读”的解决方法
- eye care staff
- 2020-08-22 cuowu
- 一个让程序员男友记住一辈子的 IntelliJ IDEA 插件!
- 魅族“携手”京东,背后有何意图?
- IEEE和SCI等的通俗简介
- Gentle.NET笔记(二)-列表示例
- cxfservlet_webService框架CXF的简单使用
- Assembler: 汇编语言程序结构
- 计算机主板电感有正负极么,功率电感有没有方向?正负极区分
- 青龙面板 Nolan 诺兰 2.4 安装教程
- oracle第三章、第四章作业
- 内部收益率 IRR XIRR
- 黑客入侵应急分析手工排查
- Ansys中meshing启动时经常弹出“script error”
- 计算机快速启动栏在哪,快速启动栏,教您怎么显示快速启动栏
- 一个屌丝程序猿的人生(二十五)
热门文章
- 磁盘管理以及文件系统管理
- 核桃编程学python吗_学编程要趁早?对话核桃编程X支付宝 “小程序编程马拉松”三强得主...
- QQ农场外挂开发实践
- [《Python2.1宝典》笔记] 12-14章
- 小程序仿学习强国填空题
- 机械键盘简要介绍。。。。
- 命运更喜欢将丰硕约果实馈赠给那些含着泪微笑的灵魂
- python Flask 编写 api 接口,CORS 解决 flask 跨域问题
- 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)
- 设f(x)=∑x^n/n^2,证明f(x)+f(1-x)+lnxln(1-x)=∑1/n^2