V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ?  程序员

如何提升 Spring Data Redis saveAll 的性能?

  •  
  •   JasonLaw · 12 天前 · 428 次点击

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    我有如下 class Student 。

    @RedisHash("Student")
    public class Student {
    
      @Id
      private String id;
    
      @Indexed
      private String name;
    
      @Indexed
      private int age;
    
      // Getters and Setters (omitted for brevity)
    }
    

    然后我使用 Spring Data Redis saveAll 来保存多个 Students 。

    public interface StudentRepository extends CrudRepository<Student, String> {
    }
    
    public void saveAllStudents(List<Student> students) {
      studentRepository.saveAll(students);
    }
    

    但是如果 students 数量很大的话,studentRepository.saveAll(students)很慢,因为它是一个一个遍历然后执行 save 的。有什么办法可以优化吗?

    3 条回复
    chihiro2014
        1
    chihiro2014  
       11 天前
    用管道操作?
    Red998
        2
    Red998  
       11 天前
    你这是把 redis 当成数据库了。。 管道可以实现、但是有缺点数据量大、占用内存就多、网络阻塞什么的。原子性可以保证、但不能回滚。 我的建议异步 mq 分批次 。起码 mq 可以根据你的消费速率、再不济就上 binlog 监听同步数据。
    JasonLaw
        3
    JasonLaw  
    OP
       9 天前 via iPhone
    @chihiro2014 #1 现在选择这种方法,不过缺点就是要自己实现保存数据和索引。?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2426 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:04 · PVG 20:04 · LAX 05:04 · JFK 08:04
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com