Redis Mass Insertion

redis使用过程中需要给当前redis实例导入大量数据时,用rediscli --pipe,管道技术,可以避免单行命令带来的频繁链接开销。从而实现快速导入数据。

将需要导入的数据生成redis协议文件:

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

其中<cr> 代表 "\r", <lf> 代表 "\n" 。*后面跟命令参数个数。例如:set key value命令行由参数长度为3*后面是3。$后边是命令参数长度set为3,$3。$3后边为具体命令set。

按照上述规则,set key value的redis协议文件为:

*3
$3
set
$3
key
$5
value

例如有这样一个样例文件data.txt,用户id#密码#email:

a#a#a
b#b#b
c#c#c

将他以hashmap的形式存储在redis中。通过一个python脚本生成redis协议文件:

#coding=utf-8
#! /usr/bin/env python
import sys
f = open(r'/home/jeff/data.txt')
fsave = open('redisProtocol', 'w+')
try: 
	line = f.readline()
	while line: 
		row = line.strip().split('#'),
		print row[0]
		(useid, pwd, email) = row[0];
		fsave.write('*4'+'\r\n')
		fsave.write('$4'+'\r\n')
		fsave.write('hset'+'\r\n')
		fsave.write('$%d'%len(useid)+ '\r\n')
		fsave.write(useid+ '\r\n')
		fsave.write('$6'+'\r\n')
		fsave.write('passwd'+'\r\n')
		fsave.write('$%d'%len(pwd)+ '\r\n')
		fsave.write(pwd+'\r\n')
		fsave.write('\r\n')
		fsave.write('*4'+'\r\n')
		fsave.write('$4'+'\r\n')
		fsave.write('hset'+'\r\n')
		fsave.write('$%d'%len(useid)+ '\r\n')
		fsave.write(useid+ '\r\n')
		fsave.write('$5'+'\r\n')
		fsave.write('email'+'\r\n')
		fsave.write('$%d'%len(email)+'\r\n')
		fsave.write(email+'\r\n')
		fsave.write('\r\n')
		line = f.readline() 
finally:
	f.close()
	fsave.close()

通过运行上述python脚本生成相应的redis协议文件redisprotocol,内容如下:

*4
$4
hset
$1
a
$6
passwd
$1
a

*4
$4
hset
$1
a
$5
email
$1
a

*4
$4
hset
$1
b
$6
passwd
$1
b

*4
$4
hset
$1
b
$5
email
$1
b

*4
$4
hset
$1
c
$6
passwd
$1
c

*4
$4
hset
$1
c
$5
email
$1
c

运行

cat redisptotocol | ./redis-cli --pipe

将所有数据进行快速导入。 


你可能感兴趣的:(Redis Mass Insertion)