zoukankan      html  css  js  c++  java
  • Spring data redis 使用 pipelined 批量操作

    需求说明

    当用到数据的时候,将项目中数据放到redis中,这些数据预计会达到十几万。

    方案一

    // 这样最简单
    list.forEach(s -> redisTemplate.opsForSet().add("key", s));
    

    如上代码很简单,遍历集合放入redis,但是这样效率低,每次都要获取一次连接,十几万的连接,大部分时间都在创建销毁连接了,真正执行任务的时间相对来说要少很多。
    在这里插入图片描述
    看上面进来执行任务的时候要先获取一次连接,finally里面释放了(如果你使用了事务那么就不会重新获取连接,不过这不是本文要讲的,如果想了解自己可以看看。)所以方案一要优化。

    方案二

    RedisSerializer keyS = redisTemplate.getKeySerializer();
    RedisSerializer valueS = redisTemplate.getValueSerializer();
    byte[] key = keyS.serialize("key");
    
    redisTemplate.executePipelined((RedisCallback<String>) connection -> {
        list.stream().forEach(s -> connection.sAdd(key, valueS.serialize(s)));
        // 设置过期时间
        connection.expire(key, 60L);
        return null;
    });
    

    redis提供了批量操作方式执行命令,就是pipeline。使用方式如上,方法内所有命令都是在一个连接内。这样就完美解决了我们的问题。

  • 相关阅读:
    MediaInfo代码阅读
    HEVC与VP9之间的对比
    x264阅读记录-3
    x264阅读记录-2
    x264阅读记录-1
    Linux脚本程序
    VS2015 ASP.NET5 Web项目结构浅析
    VS2015 Apache Cordova第一个Android和IOS应用
    VS2015 C#6.0 中的那些新特性
    aehyok.com的成长之路三——框架结构
  • 原文地址:https://www.cnblogs.com/paper-man/p/13284632.html
Copyright © 2011-2022 走看看