美文网首页
Redis 之 lua

Redis 之 lua

作者: 杭州_mina | 来源:发表于2017-06-02 21:12 被阅读0次

1.为什么要使用lua脚本,使用lua脚本操作redis有哪些好处

  • 1.我现在模拟一个场景获取一个用户的购物车里面所有商品的详情。
    • 1.1 用户购物车的redis数据结构
Map itemInfo = new HashMap();
itemInfo.put("name","刮胡刀");
itemInfo.put("type","电动");
itemInfo.put("price","200.00");
....穿件10件商品
Jedis jedis = CacheUtils.getJedis();
try{
       jedis.sadd("car." + userId,"item.info." +Item);
       jedis.sadd("car." + userId,"item.info." +Item2);
       jedis.hmset("item.info." +Item ,itemInfo);
       jedis.hmset("item.info." +Item2 ,itemInfo2);
      .......插入10件商品
}finally{
       CacheUtils.returnJedis(jedis);
}
    • 1.2 获取某个用户购物车的所有详情
Jedis jedis = CacheUtils.getJedis();
try{
       Set<String> infos = jedis.smembers("car."+userId);
       for (String info : infos){
            Map itemInfo = jedis.hgetAll(info);
       }
}finally{
       CacheUtils.returnJedis(jedis);
}

以上代码实现了获取某个用户购物车的所有商品。

    • 1.3 使用lua获取某个用户购物车的所有详情
StringBuffer lua = new StringBuffer();
        lua.append("     local infos = redis.call('SMEMBERS','car.'..KEYS[1]); ")
                .append("local datas = {}; ")
                .append("for i,info in ipairs(config_ids) do ")
                .append("   local info = redis.call('HGETALL',info); ")
                .append("   table.insert(datas,info); ")
                .append("end; ")
                .append("return datas ");
        Jedis jedis = CacheUtils.getJedis();
        String scriptLoad = jedis.scriptLoad(lua.toString());
        try {
            List<String> list = (List<String>)jedis.evalsha(scriptLoad,1,userId);
        }   finally {
            CacheUtils.returnJedis(jedis);
        }
      • 1.3.1 使用lua能减少网络的开销,假设原先10次请求和10次响应,使用lua将减少至1次请求1次响应,并且lua会被缓存到redis中再次执行这个方法的时候,直接在redis中获取缓存的脚本直接执行,进一步的减少网络的开销。
      • 1.3.2 减少线程持有jedis对象的时间,更快的把redis对象释放掉。
      • 1.3.3 lua能保证整一个代码块的原子性,通过lua可以实现一些简单的分布式锁的功能。

2.使用lua的注意事项

  • 1 使用lua操作redis的时候需要注意【不能执行太复杂的逻辑】一旦lua脚本执行了太复杂的逻辑势必会占用了redis的整个资源,使得其他的线程只能阻塞,严重会影响整个系统的吞吐量。

相关文章

  • 分布式锁之redis-lua脚本

    目录 redis分布式锁,Lua,Lua脚本,lua redis,redis lua 分布式锁,redis set...

  • Redis第四天

    Redis+Lua语言限流实战 Redis+LUA语言限流流程图 Redis+Lua语言抢红包实战

  • Redis 之 lua

    1.为什么要使用lua脚本,使用lua脚本操作redis有哪些好处 1.我现在模拟一个场景获取一个用户的购物车里面...

  • 《redis学习》之lua

    Redis+Lua的好处 redis在2.6开始加入了lua脚本,使用lua脚本有如下好处: 减少网络开销。复合操...

  • lua与redis pipeline

    lua Redis在2.6版引入了对Lua的支持 使用Lua可以非常明显的提升Redis的效率。 只要脚本所对应的...

  • Redis 脚本

    Redis 脚本 Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua ...

  • Redis 使用Lua脚本——基本使用

    Redis在2.6版引入了对Lua的支持。 使用Lua可以非常明显的提升Redis的效率。 Redis的一些命令 ...

  • Redis中调用Lua脚本阻塞

    在高并发系统中,redis的使用会比较频繁,lua脚本让redis的使用更加灵活。redis中使用lua脚本的好处...

  • Lua 教程

    要想学好redis就的会用lua Lua 教程 | 菜鸟教程

  • Redis - Lua脚本

    Redis - Lua脚本 Redis服务器在启动时,会对内嵌的Lua环境执行一系列修改操作,从而确保内嵌的Lua...

网友评论

      本文标题:Redis 之 lua

      本文链接:https://www.haomeiwen.com/subject/heyufxtx.html