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

该文章介绍了一段Lua脚本,用于在Springboot应用中获取Redis中的ZSET元素集合,并进行持久化到数据库。脚本首先通过keys命令获取匹配的Redis键,然后遍历结果,使用zrange获取ZSET的成员及其分数,将数据存储到table中。由于Redis终端执行lua需要使用eval,并且返回的table在Lua中作为数组处理,而非键值对的Map。文章还提到,print在Redis控制台中不可用,调试主要依赖return和type函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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麒的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值