redis lua调试,java使用lua脚本操作 redis
";")); String delLongKeys = webWebsocketRequestSet.stream().map((requestId) -> longHashKey + ":" + requestId).collect(Collectors.joining(";")); List<String> keys = Arrays.asList(shortHashKey, longHashKey); redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("redis/clear-local-key.lua"))); redisTemplate.execute(redisScript, keys, delShortKeys, delLongKeys); } catch (Exception e) { e.printStackTrace(); } return "sssssssss"; }}再来看下lua脚本,这东西花了我不少的时间
local short_hash_key = KEYS[1];local long_hash_key = KEYS[2];local del_short_hash_keys = ARGV[1];local del_long_hash_keys = ARGV[2]; local function tt_split(str,reps ) local resultStrList = {} string.gsub(str,[^..reps..]+,function ( w ) table.insert(resultStrList,w) end) return resultStrList endlocal del_short_key_list= tt_split(del_short_hash_keys,";")for i = 1, #del_short_key_list do local del_key = del_short_key_list[i]; redis.call("DEL", del_key) redis.call("HDEL", short_hash_key, del_key)end local del_long_key_list = tt_split(del_long_hash_keys,";")for i = 1, #del_long_key_list do local del_key = del_long_key_list[i]; redis.call("DEL", del_key) redis.call("HDEL", long_hash_key, del_key)end
4、技术点
1、redis 传参可以有两个全局变量,一个KEYS,一个是ARGV
2、redis执行的lua 不可以有全局变量,因为会污染环境,所以这里的function 是local
3、lua没有线程的字符串拆分函数,上面的函数是我找些unity的同学从项目中扒出来的
4、lua 列表的下标从1 开始的
5、redis中执行的lua 是 事务性的
6、lua 会阻塞线程,如果脚本太耗时会卡主服务器
5、调试方式
调试lua脚本是真的费劲,因为在redis desktop manage中不太好测试,下面说下怎么测试,如果你本机安装了redis。
1、进入服务关闭关闭正在运行的服务器
2、从命令行启动redis
找到redis 在本机的安装路径,我的路径是 C:Program FilesRedis
打开命令行,输入下面的命令就能启动redis服务器了
redis-server.exe redis.windows.conf
3、在lua脚本中增加打印
redis.log(redis.LOG_WARNING, "last_tokens " .. last_tokens)
4、运行代码
调用lua脚本,就可以看到下面的输出了,如果你不想看了,就直接从服务启动redis就好了
注意:正式应用的时候把log 注释掉。
6、总结
今天主要的时间耗费在lua 函数的定义,一直没有搞懂怎么调用,点有背,碰了好多次都没成功。
到此这篇关于springboot中使用redis并且执行调试lua脚本的文章就介绍到这了,更多相关springboot使用redis执行调试lua内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。