使用Spring-Data-redis将500K记录插入Redis中



我使用redis作为缓存,一旦我要从oracle数据库中获取表,然后将这些记录插入Redis Cache。我正在使用两者的存储库,所以我正在做类似的事情:

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

但是,当我将其保存到Redis上时,这非常慢,因为它的记录约为500K。我知道我可以改善从数据库中获取的方式并使用分页,但可以改善Redis的节省。有没有办法将批量插入到redis中,因为现在似乎正在打开和关闭每个记录的redis连接。

一种可能的方法是将响应从Oracle批量,并使用Redis-Pipeline在Redis Server中设置这些键。

使用管道将多个命令发送到redis服务器将允许对批处理进行处理,而无需等待Evert 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;
  }
});

春季数据redis管道

最新更新