永发信息网

如何高效地向Redis写入大量的数据

答案:2  悬赏:60  手机版
解决时间 2021-04-01 12:11
如何高效地向Redis写入大量的数据
最佳答案
具体实现步骤如下:
1. 新建一个文本文件,包含redis命令
SET Key0 Value0
SET Key1 Value1
...
SET KeyN ValueN
如果有了原始数据,其实构造这个文件并不难,譬如shell,python都可以
2. 将这些命令转化成Redis Protocol。
因为Redis管道功能支持的是Redis Protocol,而不是直接的Redis命令。
如何转化,可参考后面的脚本。
3. 利用管道插入
cat data.txt | redis-cli --pipe
Shell VS Redis pipe
下面通过测试来具体看看Shell批量导入和Redis pipe之间的效率。
测试思路:分别通过shell脚本和Redis pipe向数据库中插入10万相同数据,查看各自所花费的时间。
Shell
脚本如下:
#!/bin/bash
for ((i=0;i<100000;i++))
do
echo -en "helloworld" | redis-cli -x set name$i >>redis.log
done
每次插入的值都是helloworld,但键不同,name0,name1...name99999。
Redis pipe
Redis pipe会稍微麻烦一点
1> 首先构造redis命令的文本文件
在这里,我选用了python
#!/usr/bin/python
for i in range(100000):
print 'set name'+str(i),'helloworld'
# python 1.py > redis_commands.txt
# head -2 redis_commands.txt
set name0 helloworld
set name1 helloworld
2> 将这些命令转化成Redis Protocol
在这里,我利用了github上一个shell脚本,
#!/bin/bash
while read CMD; do
# each command begins with *{number arguments in command}\r\n
XS=($CMD); printf "*${#XS[@]}\r\n"
# for each argument, we append ${length}\r\n{argument}\r\n
for X in $CMD; do printf "\$${#X}\r\n$X\r\n"; done
done < redis_commands.txt
# sh 20.sh > redis_data.txt
# head -7 redis_data.txt
*3
$3
set
$5
name0
$10
helloworld
至此,数据构造完毕。
测试结果
全部回答

优化服务器配置,一些配置参数对写入性能影响很大,如appendfsync、slave的数量。
使用多个客户端连接并发写入。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何拯救被生活磨砺的特别坚强而不需要爱的人
鱼头肉尾说的是什么?有没什么典故?
宝马gs自行车多少钱
注册岩土工程师是先考基础再考专业吗
回龙观建材城,北七家家具城,水屯建材市场...
不能吃的那种核桃是什么核桃
考研英语只做真题行不行
求助好心人把这很牛的公式改选股公式, 量过M
纽比士的品牌-产品
顺德汽车总站有没有公交车到乐从顺联家具城怎
值得自己骄傲的比较好的作品叫大作,那谦虚地
微微一笑很倾城贝微微玩的游戏是什么 现实中
求和,Sn=x+2x²+3x的三次方+。。。+nx的
地暖容易坏吗?
梦见男朋友不见了
推荐资讯
儿童果糖摄入过多的影响
660瓦灯一个月要用多少电
以下事例中,不符合安全用电原则的是A.用湿抹
如何学习气功?
雷阵雨厉害还是大雨厉害哪个更猛点还有大暴雨
途观在欧洲的起售价是多少?
全国畜牧兽医学校都有哪些?哪个大虾可以给我
梦幻西游手游碎甲刃与阴伤搭配怎么样 内丹碎
单选题在0在0.5后面加上“%”,这个数就_____
莎莎美容美体养生馆地址好找么,我有些事要过
汽车私自改装天然气没有合格证,怎样才能办
数字乘以2加数字乘以3加数字乘以4加数字乘以5
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?