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

64 天前
 JasonLaw

我有如下 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 的。有什么办法可以优化吗?

622 次点击
所在节点    程序员
3 条回复
chihiro2014
64 天前
用管道操作?
Red998
63 天前
你这是把 redis 当成数据库了。。 管道可以实现、但是有缺点数据量大、占用内存就多、网络阻塞什么的。原子性可以保证、但不能回滚。 我的建议异步 mq 分批次 。起码 mq 可以根据你的消费速率、再不济就上 binlog 监听同步数据。
JasonLaw
61 天前
@chihiro2014 #1 现在选择这种方法,不过缺点就是要自己实现保存数据和索引。🤕

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1034735

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX