lua脚本获取table类型-Java使用lua脚本操作redis获取zset元素的集合
7.0点赞功能-定时持久化到数据库-lua脚本的编写_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1bu411j75u
这个脚本主要是放到Springboot工程里的,
local prefix = KEYS[1];
local redisKeys = redis.call('keys',prefix ..'*');
if(not redisKeys)
then
return (nil);
end;
local maps = {};
for i, v in pairs(redisKeys) do
local blogId = string.sub(v,string.len(prefix) + 1,string.len(v));
local zset = redis.call('zrange',v,'0','-1','withscores');
table.insert(maps,blogId);
table.insert(maps,zset);
end;
return maps;
这里如果是向放到字段控制台执行,那就要加入eval
关键字以及其他参数:
eval "
local prefix = KEYS[1];
local redisKeys = redis.call('keys',prefix ..'*');
if(not redisKeys)
then
return (nil);
end;
local maps = {};
for i, v in pairs(redisKeys) do
local blogId = string.sub(v,string.len(prefix) + 1,string.len(v));
local zset = redis.call('zrange',v,'0','-1','withscores');
table.insert(maps,blogId);
table.insert(maps,zset);
end;
return maps;
" 1 BLOG_LIKED_KEY
返回的变量是maps,已经是table类型。
table类型在lua脚本中可以代表是数组,也可以是以键值对的Map集合。
但是如果是要在redis的终端来执行lua脚本的话,这里一定要使用table.insert
方法来将数据插入到要返回的那个maps变量里面,这样的table类型才可以返回。
table.insert
这个方法应该是maps成为table类型的数组形式吧。本来想用maps[key]=val
这种形式,发现根本走不通,也就是return时没办法返回这种类型的数据,也就是没办法返回以键值对存储的Map集合类型的数据。
另外调试工具网上大多数都是用print这个函数,笑死,好像都没讲可以在redis终端控制台中执行lua脚本的打印语句,这个print是行不通的,所以就用return来测试吧,将就用吧,另外type函数也是好用的api,可以查看lua语言里的数据类型。
怎么在Springboot工程使用这种lua脚本,就看:
(108条消息) springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库_xin麒的博客-CSDN博客