一分钟学会在-Go-程序中实现管道-pipeline-功能

乘着打盹的时间看了一眼前两天写的日期转换的开源工具: ts。发现管道 pipeline 的功能点可以放大一下, 就此记录一下以备将来只需。 管道是什么但凡在类 Unix 系统上敲过命令的人,大多使用过管道功能. 所谓管道,就是将A程序的标准输出作为B程序的标准输入。而在类 Unix 系统只需要使用 | 符号,连接 A 和 B 程序即可, 即 A | B。通过多次管道连接,就可以实现非常强大的功能。所以在类 Unix 系统上开发命令行程序有个著名的原则: KISS,即 Keep It Simple Stupid。 画了张简单的图: Go 程序在 Go 程序中实现管道功能及其简单,直接上码: //先取程序的标准输入属性信息 info, err := os.Stdin.Stat() if err != nil { return errors.Annotate(err, "stdin stat failed") } // 判断标准输入设备属性 os.ModeCharDevice 是否设置 // 同时判断是否有数据输入 if (info.Mode()&os.ModeCharDevice) == os.ModeCharDevice && info.Size() > 0 { bytes, err := ioutil.ReadAll(os.Stdin) if err != nil { return errors.Annotate(err, "stdin read failed") } //TODO... }属性 os.ModeCharDevice 的意思是标准输入的设备类型是Unix字节流设备(Unix character device)即终端(terminal)输入。该方式判断有一个注意点: ...

June 28, 2019 · 1 min · jiezi

shell通过通道批量插入大量数据到redis

前言:当我们需要短时间内快速插入大量数据到redis中,就需要一个行之有效的方式。 实践发现redis的(Redis Mass Insertion – Redis)是个比较高效的方法。借助于pipline插入首先通过简单的脚本生成例如如下的:SET Key0 Value0SET Key1 Value1…SET KeyN ValueN的目标文本文件。转码redis-cli中只支持dos格式的换行符 rn ,如果在Linux下、Mac下或者Windows下创建的文件,最好都转个码。没有转码的文件,执行会失败。 转换的方法有好多种:a. 利用todos进行转化。如未进行安装可参考这里。todos set_ins_redis.txtb. 利用vim格式化$ vim set_ins_redis.txt:set fileformat=dos:wq最后执行如下命令:cat set_ins_redis.txt | redis-cli -p 8244 –pipe执行成功后会出现如下信息:All data transferred. Waiting for the last reply…Last reply received from server.errors: 0, replies: 10654294Done

March 6, 2019 · 1 min · jiezi