Redis批量导入数据——Pipe

  |   0 评论   |   0 浏览

这段时间有点忙(懒),没有写 blog 了,其实这几天也准备开始写写, 刚好今天有个同事在问我为什么最近都没有写了,想想不能再懒了,不然时间长了就该忘记要写的东西了。最近有几个点想写,第一个就是这次文章的主题,Redis 的 Pipe 批量数据导入;第二个是虚拟机中静态 ip 的配置;第三个是 IDEA 远程调试线上代码。准备分三篇 blog 来写,今天先写第一部分。

背景

前端时间老大提了个需求,想把以前手动报备的一些数据改成现在自动报备。在一开始手动报备的时候是出现一台机器都要手动填写一个表单,进行 redis 的存储进行报备,现在想做成生产一个文件,定时将文件自动导入 redis 进行报备。经过查询,了解到 redis 的批量导入用到了 redis 的 Pipe 功能。

文件格式

Redis 的 Pipe 功能,原理是将所有的数据按照 Redis 规定的协议,根据官网提供的文档,了解到文件的格式应该如下:

 1  *3
 2  $3
 3  set
 4  $17
 5  1004_ea6d1a37c50d
 6  $179
 7  {"barcode":"","city":0,"firstvisit":"2017-03-17","model":"55PUF7102_T3","province":0,"resolution":"1920*1080","size":55,"system":"","tagList":"1004,2003,3004,4001","tvchipset":""}
 8  *3
 9  $3
10  set
11  $17
12  1004_ea6d1a37c50d
13  $179
14  {"barcode":"","city":0,"firstvisit":"2017-03-17","model":"55PUF7102_T3","province":0,"resolution":"1920*1080","size":55,"system":"","tagList":"1004,2003,3004,4001","tvchipset":""}

说明:虽然说文件的格式是这样的,但是其目的主要是执行 set key1 value1 的命令。但是并不能在文件中直接存储所有的 set key* value*,这样效率会很低下,
上面的协议格式说明:*是固定写法,3 表示命令和参数的总个数(set key value 总共三个单词)。后面的3表示命令'set'的字符长度,为固定写法;以及后面的 $17,17 则表示后面第一个参数(key)的长度,同理 $179 表示最后一个参数(value)的长度

文件模式类型

  • 原本通过脚步已经按照 Redis 协议生成了文件,但是在执行命令
1cat data.txt | ~/Work/redis-3.2.8/src/redis-cli --pipe

其中 data.txt 包含上面格式的数据,~/Work/redis-3.2.8/src/redis-cli 为 redis 客户端的路径,--pipe 表示通过 pipeline 命令执行。
在执行完上述命令过后,没有成功导入到 redis 中,而是报了错。
bug
经常查询资料发现命令执行的文件需要是 dos 格式的,通过 vim 的 set ff 命令发现原本的文件模式类型是 unix 的,不是 dos,因而执行报错。通过执行 vim 命令 set ff=dos,设置文件模式类型为 dos,然后再次执行命令成功。
bug


标题:Redis批量导入数据——Pipe
作者:zhuSilence
微信:zx1347023180
地址:https://home.zxsilence.cn/articles/2017/03/27/1571673937812.html

欢迎添加作者私人微信,备注博客;关注私人公众号