redis+lua脚本

5 篇文章 0 订阅

1.lua+java

第一种形式直接在代码中


    @Autowired
    private 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值