lua脚本获取table类型-Java使用lua脚本操作redis获取zset元素的集合

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博客

你可能感兴趣的:(lua,java,redis)