首页 » Web前端 » phpbytesize技巧_redis 插入大年夜量数据php和ruby脚本

phpbytesize技巧_redis 插入大年夜量数据php和ruby脚本

访客 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

1.nc(netcat) 做事器ip地址 端口号 > /dev/null

2.管道(redis-cli --pipe)

phpbytesize技巧_redis 插入大年夜量数据php和ruby脚本

第一种模式须要将生产比如10亿条数据的语句放到data.txt文件中,格式如下:

phpbytesize技巧_redis 插入大年夜量数据php和ruby脚本
(图片来自网络侵删)

SET Key0 Value0SET Key1 Value1...SET KeyN ValueN

末了实行:(cat data.txt;sleep 10) | nc localhost 6379 > /dev/null

但是nc并不会报错,以是我们不知道某个set命令是否有问题

第二种模式:redis版本>=2.6.0

cat data.txt | redis-cli --pipe

该命令会返回如下输出:

All data transferred. Waiting for the last reply...Last reply received from server.errors: 0, replies: 1000000

个中errors是缺点命令的数量,replies是回答的总数

以上是通过天生.txt文件进行大数据插入。

官方文档还可以通过redis protocol(协议来插入),详细可以参照appendonly.aof文件的格式,如果对redis持久化策略有研究的话就能很随意马虎的看到aof的语法:

<args><cr><lf>$<len><cr><lf><arg0><cr><lf><arg1><cr><lf>...<argN><cr><lf>

直接上ruby代码:

def gen_redis_proto(cmd) proto = "" proto << ""+cmd.length.to_s+"\r\n" cmd.each{|arg| proto << "$"+arg.to_s.bytesize.to_s+"\r\n" proto << arg.to_s+"\r\n" } protoendputs gen_redis_proto("SET","mykey","Hello World!").inspect

(0...1000).each{|n| STDOUT.write(gen_redis_proto("SET","Key#{n}","Value#{n}"))}

以上函数浸染很大略,实在便是天生一下这种格式的字符串:

"3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n"

末了实行该.rb文件:

$ ruby proto.rb | redis-cli --pipeAll data transferred. Waiting for the last reply...Last reply received from server.errors: 0, replies: 1000

直接上php代码:

<?phpclass GenRedisProto{ public function gen_redis_proto() { $arg_nums = func_num_args(); $proto = ""; $proto .= "".$arg_nums."\r\n"; // 获取参数详细值 $args = func_get_args(); foreach ($args as $key => $value) { $proto .= "$".strlen($value)."\r\n"; $proto .= $value."\r\n"; } return $proto; }}$object = new GenRedisProto();$range = range(1, 1000);$txt = ""; foreach ($range as $key => $value) { $txt .= $object->gen_redis_proto("SET", "Key".$value, "Value".$value);}echo $txt;

末了实行该.php 文件:

$ php redis-test.php | redis-cli --pipeAll data transferred. Waiting for the last reply...Last reply received from server.errors: 0, replies: 1000

结果是一样的,都往redis做事器天生了{key1:value1,key2:value2...,key1000:value1000}1000个key。

主要解释:利用管道发送命令时,做事器将被迫回答一个行列步队答复,占用很多内存。
以是,如果你须要发送大量的命令,最好是把他们按照合理数量分批次的处理,例如10K的命令,读回答,然后再发送另一个10k的命令,等等。
这样速率险些是相同的,但是在回答这10k命令行列步队须要非常大量的内存用来组织返回数据内容。

pipe mode事情事理:难点是担保redis-cli在pipe mode模式下实行和netcat一样快的同时,如何能理解做事器发送的末了一个回答。

这是通过以下办法得到:

redis-cli –pipe尽可能快的把数据发送到做事器读取数据的同时并解析它。
一旦没有更多的数据输入,它就会发送一个分外的ECHO命令,后面随着20个随机的字符。
我们相信可以通过匹配回答相同的20个字符是同一个命令的行为。
一旦这个分外命令发出,收到的答复就开始匹配这20个字符,当匹配时,就可以成功退出了。

同时,在剖析回答的时候,我们会采取计数器的方法计数,以便在末了能够见告我们大量插入数据的数据量,也便是replies和errors。

标签:

相关文章

今日头条算法如何实现个化推荐与精准传播

信息传播方式发生了翻天覆地的变化。今日头条作为国内领先的信息分发平台,凭借其强大的算法推荐系统,吸引了海量用户。今日头条的算法究竟...

Web前端 2025-01-31 阅读1 评论0

今日头条算法关闭之谜内容分发新格局

今日头条作为一款备受瞩目的新闻资讯平台,凭借其独特的算法推荐机制,吸引了大量用户。近期有关今日头条算法关闭的消息引发了广泛关注。本...

Web前端 2025-01-31 阅读1 评论0

今日头条算法智能推荐背后的科技魅力

信息爆炸的时代已经到来。人们每天在互联网上接触到海量的信息,如何从中筛选出有价值的内容,成为了人们关注的焦点。今日头条作为一款智能...

Web前端 2025-01-31 阅读1 评论0

今日头条算法专利申请个化推荐的秘密武器

信息爆炸的时代已经来临。在众多信息中,如何快速找到自己感兴趣的内容成为了一个难题。今日头条作为中国领先的资讯平台,凭借其独特的算法...

Web前端 2025-01-31 阅读1 评论0

今日头条算法机器推荐模式的秘密与挑战

大数据、人工智能等新兴技术的应用已经渗透到我们生活的方方面面。在信息爆炸的时代,人们获取信息的渠道越来越丰富,如何在海量信息中找到...

Web前端 2025-01-31 阅读1 评论0