我有一个名为abc.csv的csv文件,其中包含如下数据:
全部,星期五,0:00,315.06,327.92,347.24
全部,星期五,1:00,316.03,347.73,370.55
依旧.....
我希望将数据导入Redis。如何通过Java API完成。 请建议执行此操作的步骤。
我希望运行jar并将数据导入Redis db。 如果无法使用Java选项,任何有关大量插入的帮助也会有所帮助。
答案 0 :(得分:3)
你可以使用jedis(https://github.com/xetorthio/jedis),redis的java客户端来实现。只需使用main方法创建一个类并创建一个连接,设置键。
void processData(){
List<String> lines = Files.readAllLines(
Paths.get("\Path\abc.csv"), Charset.forName("UTF-8"));
Jedis connection = new Jedis("host", port);
Pipeline p = connection.pipelined();
for(String line: lines){
String key = getKey(line);
String value = getValue(line);
p.set(key,value);
}
p.sync();
}
如果文件很大,你可以创建一个输入流并逐行读取而不是加载整个文件。您还应该批量调用p.sync(),只需保留一个计数器并使用批量大小进行模数。
答案 1 :(得分:0)
Redisson允许将多个命令组织到一个命令。这称为Redis流水线。这是一个例子:
List<String> lines = ...
RBatch batch = redisson.createBatch();
RList<String> list = batch.getList("yourList");
for(String line: lines){
String key = getKey(line);
batch.getBucket(key).set(line);
}
// send to Redis as single command
batch.execute();
答案 2 :(得分:0)
您可以使用 Jedis Lib。在这里,我扩展了我的 Java 对象以获取要在对象中设置的键和哈希。在您的情况下,您可以将已解析的 CSV 值列表和键直接作为列表发送。
private static final int BATCH_SIZE = 1000;
public void setRedisHashInBatch(List<? extends RedisHashMaker> Obj) {
try (Jedis jedis = jedisPool.getResource()) {
log.info("Connection IP -{}", jedis.getClient().getSocket().getInetAddress());
Pipeline p = jedis.pipelined();
log.info("Setting Records in Cache. Size: " + Obj.size());
int j = 0;
for (RedisHashMaker obj : Obj) {
p.hmset(obj.getUniqueKey(), obj.getRedisHashStringFromObject());
j++;
if (j == BATCH_SIZE) {
p.sync();
j = 0;
}
}
p.sync();
}
}