博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批量数据导入Redis(Mass Insertion)
阅读量:2396 次
发布时间:2019-05-10

本文共 1944 字,大约阅读时间需要 6 分钟。

前言

一觉醒来改好bug的感觉真爽,可惜周围小伙伴都睡了,不能让我欢呼雀跃一下。

正文

本篇主要通过一个典型的K—V批量数据导入例子来总结的数据导入过程,同时穿插了一些格式化数据的处理方式。

需求

我的项目需要将 ‘英文单词’ – ‘汉译’ 以K-V的形式保存在中,然后进行查询功能,这里就采用了Redis的批量导入功能。

笨方法

如果在客户端,我们想要插入一条数据,就直接做就好

SET key value 
1
1

然而当遇到成千上万条呢?

我自己想到的笨方法就是写个循环呗。。。让程序自己跑。。 
但是既然有更高效和简单的办法,为什么不用呢?

优雅的方法

从Redis2.6开始,redis-cli支持使用pipe模式插入大量数据。 
我们只需要将数据格式化、协议化便可以简单高效的完成批量插入。 
如下,将数据处理之后保存在文件file,只需要

$ cat file | redis-cli --pipe 
1
1

就完成了

格式化数据

我们将需要的 ‘英语单词’和‘汉译’进行一一对应,用空格分开。 
内容如下

software n.(计算机的)软件solar a.利用太阳光的  solidarity n.团结;休戚相关   solidify vt.&vi.团结;凝固 
1
2
3
4
1
2
3
4

然后添加命令(其实这里可以不添加,因为直接使用SET)

SET software n.(计算机的)软件  SET solar a.利用太阳光的  SET solidarity n.团结;休戚相关   SET solidify vt.&vi.团结;凝固 
1
2
3
4
1
2
3
4

本文重点:协议化数据

我们需要将刚才的数据协议化为Redis的交互协议,因为一开始不知道,同时,在官方文档中,感觉是默认读者了解这个协议,所以并没有很详细的解释,导致我自己在这部分踩了很多坑。 
我们只要知道这里的协议格式,就非常清晰该如何处理了。 
在这里,我们不详细展开redis的协议格式,仅就处理本文中的例子而说明。 
例子:

SET software n.(计算机的)软件 
1
1

协议化之后

*3\r\n$3\r\nSET\r\n$8\r\nsoftware\r\n$?\r\n           //这里的问号下文说明n.(计算机的)软件\r\n 
1
2
3
4
5
6
7
1
2
3
4
5
6
7

可以看到,每行的结尾都是\r\n,第一个*3表示内容一共有3行(命令+key+value),$3表示有3个字节(也就是下面的SET),然后就是命令,$8表示有8个字节(也就是下面的software),而下面是中文了,所以这里的字节数我们需要根据实际的编码去判断,所以我采用了?来表示。 
而网上的一些协议化程序,往往没有对中文进行处理。。。(导致我踩了好长时间的坑),所以不如针对你自己的格式化数据写个程序处理一下。

和本文无关的一点感想 
看到很多人都用处理,其实这么小的事情,你只要拿你熟练的语言快速写一个程序,能正确就好,我就是拿C写的。。。

#include
#include
int main(void){ char str[200],str2[200]; FILE *f1,*f2; f1 = fopen("source","r"); //格式化数据 f2 = fopen("result","w"); //协议化之后的结果 while(fscanf(f1,"%s %s",str,str2)!=EOF){ //这里我的格式化数据就只有英文和汉译,没有SET命令 fprintf(f3,"*3\r\n$3\r\nset\r\n$%d\r\n%s\r\n$%d\r\n%s\r\n",strlen(str),str,strlen(str2),str2); } fclose(f1); fclose(f2);}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14

然后就是直接导入了

$ cat result | redis-cli --pipe

转载地址:http://wcfob.baihongyu.com/

你可能感兴趣的文章
MySQL RR隔离级别的更新冲突策略
查看>>
MySQL索引条件下推的简单测试
查看>>
通过SQL解读财富的分配(二)
查看>>
一个MySQL死锁问题的复现
查看>>
数据迁移中的几个问题总结
查看>>
心理学中的效应简单解读(r12笔记第24天)
查看>>
mysqldump简单解析
查看>>
Oracle备库无法连接主库的问题分析
查看>>
最近一周的学习计划
查看>>
MySQL备份和恢复工具图谱
查看>>
从零开始搭建Nginx和Tomcat的web集群环境
查看>>
关于技术文档
查看>>
alert日志中的一条ora警告信息的分析
查看>>
美国旧金山之行第四天
查看>>
zookeeper初探
查看>>
mysqldump与innobackupex备份过程你知多少(完结篇)
查看>>
sysbench花式踩坑之三:自增值导致的锁等待
查看>>
当心!使用mysqldump备份可能会让你欲哭无泪
查看>>
oracle 12c flex cluster专题 之 节点角色转换
查看>>
SQL优化案例-改变那些CBO无能为力的执行计划(一)
查看>>