我使用 Redis 作为缓存,一旦我要从 Oracle 数据库中获取表,然后将这些记录插入到 Redis 缓存中。我正在使用两者的存储库,所以我正在做类似的事情:
oracleRepo.findAll().forEach(record -> {
RedisEntity redisEntity = objectMapper.convertValue(record, RedisEntity.class);
redisRepo.save(redisEntity);
});
但是,当我将其保存到 Redis 上时,速度非常慢,因为它大约有 500k 条记录。我知道我可以改进从数据库获取数据并使用分页的方式,但这会改善在 Redis 上的保存。有没有办法批量插入到redis中,因为现在看起来它正在为它试图保存的每条记录打开和关闭redis连接。
最佳答案
一种可能的方法是对来自 Oracle 的响应进行批处理并使用 redis-pipeline在redis服务器中设置这些键。
使用管道向 Redis 服务器发送多个命令将允许继续处理批处理,而无需等待 Evert SET 操作的响应。
以下是 Spring Boot 使用 Redis 管道的示例代码:
//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;
}
});
关于java - 使用 spring-data-redis 将 500k 条记录插入到 redis 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681937/