Redis 之 lua

2017-06-02  本文已影响0人  杭州_mina

1.为什么要使用lua脚本,使用lua脚本操作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);
}
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);
}

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

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);
        }

2.使用lua的注意事项

上一篇下一篇

猜你喜欢

热点阅读