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脚本相关推荐

  1. Redis Lua脚本中学教程(下)

    在中学教程的上半部分我们介绍了Redis Lua相关的命令,没有看过或者忘记的同学可以步行前往直接使用机票Redis Lua脚本中学教程(上).今天我们来简单学习一下Lua的语法. 在介绍Lua语法之 ...

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

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

  3. Redis Lua脚本大学教程

    前面我们已经把Redis Lua相关的基础都介绍过了,如果你可以编写一些简单的Lua脚本,恭喜你已经可以从Lua中学毕业了. 在大学课程中,我们主要学习Lua脚本调试和Redis中Lua执行原理两部分 ...

  4. 一网打尽Redis Lua脚本并发原子组合操作

    1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算.Redis 提供了丰富的命令来供我们使用以实现一 ...

  5. Redis Lua脚本的详细介绍以及使用入门

    Redis Lua脚本的详细介绍以及使用入门. 文章目录 Redis Lua脚本的引入 开源软件的可扩展性 Redis的扩展性脚本 Redis Lua脚本的基本使用 通过EVAL命令执行Lua脚本 通 ...

  6. Redis Lua 脚本常用操作总结及实现 CAS 操作

    一.什么是 Lua ?   Lua 是一个小巧的脚本语言.它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由 R ...

  7. 深入分析 Redis Lua 脚本运行原理

    Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向服务器发送 lua 脚本来执 ...

  8. Redis Lua脚本实现原子性操作

    一.简介 redis操作时单线程的,平常如果想要redis原子性操作的话,可以使用incrBy()和decrBy()方法进行原子性的加减,但是对于事务性的逻辑操作,没有办法实现原子性,Redis 使用 ...

  9. Redis Lua脚本中学教程(上)

    失踪人口回来啦! 有读者问我为什么这么久都没有出Redis Lua中学教程,表示村头厕所已经好久没有纸了.其实我早就要写这篇中学教程了,奈何最近太忙了,就一拖再拖,直到今天我终于又开始动笔了.忘记Lu ...

  10. 修改器内置脚本编写_Node.js 中实践 Redis Lua 脚本

    对别人的意见要表示尊重.千万别说:"你错了."--卡耐基 Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提 ...

最新文章

  1. 17 博客后台富文本编辑
  2. Excel VBA两两个体距离矩阵转化为数据库格式
  3. 数据预处理+缺失值处理方案+Missing Value+pandas+缺失值填充方法、方案
  4. SQL Server 2005 Express附加(Attach)的数据库为“只读”的解决方法
  5. eye care staff
  6. 2020-08-22 cuowu
  7. 一个让程序员男友记住一辈子的 IntelliJ IDEA 插件!
  8. 魅族“携手”京东,背后有何意图?
  9. IEEE和SCI等的通俗简介
  10. Gentle.NET笔记(二)-列表示例
  11. cxfservlet_webService框架CXF的简单使用
  12. Assembler: 汇编语言程序结构
  13. 计算机主板电感有正负极么,功率电感有没有方向?正负极区分
  14. 青龙面板 Nolan 诺兰 2.4 安装教程
  15. oracle第三章、第四章作业
  16. 内部收益率 IRR XIRR
  17. 黑客入侵应急分析手工排查
  18. Ansys中meshing启动时经常弹出“script error”
  19. 计算机快速启动栏在哪,快速启动栏,教您怎么显示快速启动栏
  20. 一个屌丝程序猿的人生(二十五)

热门文章

  1. 磁盘管理以及文件系统管理
  2. 核桃编程学python吗_学编程要趁早?对话核桃编程X支付宝 “小程序编程马拉松”三强得主...
  3. QQ农场外挂开发实践
  4. [《Python2.1宝典》笔记] 12-14章
  5. 小程序仿学习强国填空题
  6. 机械键盘简要介绍。。。。
  7. 命运更喜欢将丰硕约果实馈赠给那些含着泪微笑的灵魂
  8. python Flask 编写 api 接口,CORS 解决 flask 跨域问题
  9. 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)
  10. 设f(x)=∑x^n/n^2,证明f(x)+f(1-x)+lnxln(1-x)=∑1/n^2