一:前言
平时使用python写入redis集合都是一条一条插入,当数据量很大的时候就会出现速度非常慢或者直接报错现象。今天记录一下两种加快插入速度的方式:
- 利用redis pipline 管道技术
- 把需要插入的数据分块批量插入
二:实战代码
举个例子需要添加3000万的数字用于后面分布式爬虫构造url,现在需要把3000万的数字插入redis数据库。
1.普通的插入redis set集合方法
r = redis.Redis(host="127.0.0.1", port=6379)
for i in range(1, 3 * 10 ** 8):
r.sadd('xxxxx', i)
数据量少还行,一次插入这么多数据一般就会出现问题。
2.利用redis pipline 管道技术
r = redis.Redis(host="127.0.0.1", port=6379)
pipeline = r.pipeline()
for i in range(1, 3 * 10 ** 8):
pipeline.sadd('xxxxx', i)
pipeline.execute()
这种操作相当于写了一堆的命令一次性执行完,一旦某个命令出问题那么这次插入数据就会失败。这种方式的好处。节省了本机与redis服务器链接的 IO 延时,一般来说节省了很多时间。
3.把需要插入的数据分块批量插入
for i in range(30):
ls = list(range(i*1000000,(i+1)*1000000))
r.sadd('xxxxx', *ls)
如果需要插入的数据不是这里的数字分块方法就需要换了,这样的方式是一次插入多个数据,不会出现使用pipline如果某个命令出问题就全部插入失败的现象,速度非常快,比使用pipline 的方式快了几倍。