Redis java api用于插入多个值

时间:2016-01-05 06:45:01

标签: java redis

我有一个名为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选项,任何有关大量插入的帮助也会有所帮助。

3 个答案:

答案 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();
    }
  }