远程服务器上的Redis批量插入

远程服务器上的Redis批量插入,redis,webdis,Redis,Webdis,我有一个运行Redis的远程服务器,我想从Java应用程序中推送大量数据。到目前为止,我使用Webdis推送一个命令,但效率不高,但我没有任何安全问题,因为我可以定义在redis不接受外部请求(受保护模式)时被接受为连接和协同授权的IP 我想尝试使用jedis(javaapi)和pipeline实现更快的插入,但这意味着我必须打开Redis来接受来自外部的请求 我的问题是:是否有可能以类似的方式使用webdis(pipilined mass insertion)?如果没有,我需要做什么安全配置才

我有一个运行Redis的远程服务器,我想从Java应用程序中推送大量数据。到目前为止,我使用Webdis推送一个命令,但效率不高,但我没有任何安全问题,因为我可以定义在redis不接受外部请求(受保护模式)时被接受为连接和协同授权的IP

我想尝试使用jedis(javaapi)和pipeline实现更快的插入,但这意味着我必须打开Redis来接受来自外部的请求

我的问题是:是否有可能以类似的方式使用webdis(pipilined mass insertion)?如果没有,我需要做什么安全配置才能在互联网上使用绝地武士之类的东西


提前感谢您提供的任何答案,对于Redis驱动程序来说,您如何设置安全性应该是透明的。没有任何驱动程序或密码保护会像专门设计的协议或技术那样安全

我处理安全性的最简单方法是让Redis监听
127.0.0.1:
,并使用SSH隧道连接到机器。至少通过这种方式,您可以针对当前场景测试性能


您还可以在以后使用IPSec或OpenVPN来组织能够与Redis服务器通信的专用网络。

IMO您应该对Redis驱动程序透明如何设置安全性。没有任何驱动程序或密码保护会像专门设计的协议或技术那样安全

我处理安全性的最简单方法是让Redis监听
127.0.0.1:
,并使用SSH隧道连接到机器。至少通过这种方式,您可以针对当前场景测试性能


您也可以在以后使用IPSec或OpenVPN来组织能够与Redis服务器通信的专用网络。

这个问题已经存在了将近4年,所以我希望它的作者现在已经离开了,但如果其他人也有同样的问题,我想我可能会建议一种更有效地向Redis服务器发送数据的方法

通过成批插入,您确实可以加快数据接收速度,这意味着您可以使用
MSET
在一个请求中插入多个键(或用于哈希等的HMSET)

例如,这里是ApacheBench(
ab
)使用100个客户端插入一个密钥100000次:

$ab-c100-n100000-k'http://127.0.0.1:7379/SET/foo/bar'
[...]
每秒请求数:82235.15[#/秒](平均值)
我们每秒测量82235个单键插入。请记住,HTTP基准测试不仅仅是查看平均值(延迟分布仍然很重要,等等),还有很多内容,但是这个示例只是展示批处理可以产生的不同

您可以通过以下三种方式之一()向Webdis发送命令:

  • GET/COMMAND/arg0/../argN
  • POST/
    使用HTTP正文中的
    COMMAND/arg0/../argN
    (如下所示)
  • PUT/COMMAND/arg0…/argN-1
    与HTTP正文中的
    argN
  • 如果不是每个请求插入一个密钥,而是创建一个包含
    MSET
    命令的文件,以便在单个请求中写入100个密钥,则可以显著提高写入速率

    #首先显示3个键的命令外观
    $echo-n'MSET';以美元为单位的i(序号13);do echo-n“/键-${i}/值-${i}”;完成
    MSET/key-1/value-1/key-2/value-2/key-3/value-3
    #然后保存命令以将100个密钥写入文件:
    $(echo-n'MSET';对于$(seq 1100)中的i;do echo-n“/key-${i}/value-${i}”;done)>batch-contents.txt
    
    使用此文件,我们可以使用
    ab
    将此多插入文件作为POST请求(
    -p
    )发送到Webdis:

    $ab-c 100-n 10000-k-p./batch-contents.txt-T'application/x-www-form-urlencoded'http://127.0.0.1:7379/'
    [...]
    每秒请求数:18762.82[#秒](平均值)
    
    这显示每秒18762个请求…每个请求执行100次插入,总共每秒1876282次实际键插入。 如果您在
    ab
    运行时跟踪Redis的CPU使用情况,您会发现
    MSET
    用例将其固定在100%的CPU上,而发送单个
    SET
    则没有

    再次请记住,这是一个粗略的基准测试,足以表明批量插入时存在显著差异。顺便说一句,不管是否使用Webdis,这都是正确的:从直接连接到Redis的客户端批量插入也应该比单个插入快得多


    注:(我是Webdis的作者)

    这个问题已经讨论了将近4年了,所以我希望它的作者现在已经离开了,但如果其他人也有同样的问题,我想我可能会建议一种更有效地将数据发送给用户的方法

    通过成批插入,您确实可以加快数据接收速度,这意味着您可以使用
    MSET
    在一个请求中插入多个键(或用于哈希等的HMSET)

    例如,这里是ApacheBench(
    ab
    )使用100个客户端插入一个密钥100000次:

    $ab-c100-n100000-k'http://127.0.0.1:7379/SET/foo/bar'
    [...]
    每秒请求数:82235.15[#/秒](平均值)
    
    我们每秒测量82235个单键插入。请记住,HTTP基准测试不仅仅是查看平均值(延迟分布仍然很重要,等等),还有很多内容,但是这个示例只是展示批处理可以产生的不同

    您可以通过以下三种方式之一()向Webdis发送命令:

  • GET/COMMAND/arg0/../argN
  • POST/
    使用HTTP正文中的
    COMMAND/arg0/../argN
    (如下所示)
  • PUT/COMMAND/arg0…/argN-1
    与HTTP正文中的
    argN
  • 如果不是每个请求插入一个密钥,而是创建一个文件con