【问题标题】:how to use jedis for mass insertion of commands如何使用 jedis 批量插入命令
【发布时间】:2014-03-09 14:21:24
【问题描述】:

如果我创建了一个包含以下 Redis 协议格式的命令的文件:

设置键0值0
设置键 1 值 1
...
SET KeyN 值N

如何在我的应用程序中使用 Jedis 将其提供给 Redis?

【问题讨论】:

    标签: redis jedis


    【解决方案1】:

    您可以使用流水线。它允许发送多个命令而无需等待单独的响应,然后获得唯一的响应。您将使用此功能获得更好的性能(与基本实现相比,您可以期待 x5)。

    您的实现可能如下所示:

    Pipeline p = jedis.pipelined();
    for (int i=0; i < numberOfItems; i++) {
        p.set(key[i], value[i]); 
    }   
    List<Object> results = p.syncAndReturnAll();
    

    【讨论】:

    • 值得注意的是,使用 Jedis 的流水线仍然单独发送客户端->服务器命令,因此您在 TCP 级别上没有任何收获。
    • 有什么办法可以查出jedis管道中的命令数量吗?如果多个线程将命令添加到管道并且另一个线程定期调用sync,这将很有帮助
    【解决方案2】:

    编辑

    OP 正在寻找从 Tomcat 运行的解决方案,我后来才发现。此处不建议使用原始 Redis 协议。使用 Pascal 的答案。

    /编辑

    我同意 Pascal 的观点,即流水线是几乎最快的大规模插入的好方法。 但是,OP 已经在谈论 Redis 协议,它比流水线还要快。

    然而,不是要从 Redis 客户端(如 Jedis)使用,而是要与 redis-cli 一起直接在服务器上使用。

    更多信息请参见here。

    希望这会有所帮助,TW

    【讨论】:

    • 可以直接从我的 java 应用发送到 redis-cli 吗?
    • 或者执行一个bat文件或者redis-cli的东西?我知道如何运行 exec,但不知道如何将它们联系在一起。
    • 一个bat文件?你在 Windows (MSopenTech) 上运行 redis-server 吗?如果您在服务器上,使用 exec 函数应该可以正常工作。
    • 哎呀,不。我正在使用 ubuntu。我应该如何使用我在 ubuntu 的 tomcat 中运行的 java 应用程序将它提供给 redis-client?
    • 我可以补充一点,现在我知道您要做什么的上下文,我不推荐这条路线。我不会从 Web 服务器运行管理任务。你考虑过并发吗?你不需要 redis-cli,你也可以在 jedis 之外打开一个原始套接字并在那里使用原始 redis 协议。但在你的情况下,这不是要走的路。去找 Pascal Le Merrer 的答案。旁注:使用 unix 套接字仍然是提高性能的安全有效途径。我将编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2012-09-28
    • 2012-10-23
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多