当前位置: 代码迷 >> java >> 使用 spring-data-redis 将 500k 条记录插入 redis
  详细解决方案

使用 spring-data-redis 将 500k 条记录插入 redis

热度:102   发布时间:2023-08-02 10:32:21.0

我使用 redis 作为缓存,一旦我要从 oracle 数据库中获取一个表,然后将这些记录插入到 redis 缓存中。 我正在为两者使用存储库,因此我正在执行以下操作:

 oracleRepo.findAll().forEach(record -> {
            RedisEntity redisEntity = objectMapper.convertValue(record, RedisEntity.class);
            redisRepo.save(redisEntity);
        });

但是,当我将它保存到 redis 时,这很慢,因为它大约有 50 万条记录。 我知道我可以改进从数据库中获取数据并使用分页的方式,但这会改善对 redis 的保存。 有没有办法对redis进行批量插入,因为现在它似乎正在为它试图保存的每条记录打开和关闭redis连接。

一种可能的方法是批处理来自 Oracle 的响应并使用在 redis 服务器中设置这些键。

使用管道将多个命令发送到 redis 服务器将允许继续处理批处理,而无需等待永久 SET 操作的响应。

以下是使用 redis 管道的 Spring Boot 示例代码:

//pop a specified number of items from a queue
List<Object> results = stringRedisTemplate.executePipelined(
  new RedisCallback<Object>() {
    public Object doInRedis(RedisConnection connection) throws DataAccessException {
      StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
      for(int i=0; i< batchSize; i++) {
        stringRedisConn.rPop("myqueue");
      }
    return null;
  }
});

  相关解决方案