Redis批量导入数据功能
Redis批量导入数据功能
背景:需要在生产环境中导入excel 中10W+ 底量数据,这个时候生产包已经进入交付环境验证结束环节,现程序中支持这部分数据只走部分流程,因临时改变了正常注入的流程,不能写程序,只能通过脚本的方式将这些数据导入到redis中,因没有实战过redis,只会些简单的功能,了解了下redis的功能,发现有个pipe模式可以将所有的内容快速导入到redis中,因此上午花费了两个小时的时间在自己的服务器上搭建了个redis集群验证这个功能
1.官网下载 redis-5.0.8.tar.gz
包,上传至服务器,通过以下命令解压
tar -xzvf redis-5.0.8.tar.gz
2.将解压的目录拷贝到你要安装的最终目录里,我使用的目录为 /usr/local/software/rediscluster/redis/执行以下命令拷贝
cp -R redis-5.0.8/* /usr/local/software/rediscluster/redis/
3.开始编译安装
make install
4.在/usr/local/software/rediscluster/ 目录下建redis700{1-6}六个目录以及logs目录
mkdir redis7001 redis7002 redis7003 redis7004 redis7005 redis7006 logs
5.再创建startCluster.sh,createCluster.sh,shutdownCluster.sh三个文件备用,并授予执行权限
touch startCluster.sh
touch createCluster.sh
touch shutdownCluster.sh
chmod 777 startCluster.sh
chmod 777 createCluster.sh
chmod 777 shutdownCluster.sh
6.接下来拷贝redis.conf文件到 /usr/local/bin目录下,将/usr/local/bin目录下的东西都拷贝到之前创建的reids700{1-6}目录下,并将redis-cli拷贝备用
cp -R /usr/local/bin/* /usr/local/software/rediscluster/redis7001/
cp -R /usr/local/bin/* /usr/local/software/rediscluster/redis7002/
cp -R /usr/local/bin/* /usr/local/software/rediscluster/redis7003/
cp -R /usr/local/bin/* /usr/local/software/rediscluster/redis7004/
cp -R /usr/local/bin/* /usr/local/software/rediscluster/redis7005/
cp -R /usr/local/bin/* /usr/local/software/rediscluster/redis7006/
cp -R /usr/local/bin/redis-cli /usr/local/software/rediscluster/
7.然后修改redis700{1-6}目录下的redis.conf配置文件,修改完后改名为redis-{port}.conf
第1处: port 6379 ————> 值 改成 7001
第2处: daemonize no ————> 值 改成 yes
第3处: pidfile /var/run/redis_6379.pid ————> 值 改成 /var/run/redis_7001.pid
第4处: logfile "" ————> 值 改成 "../logs/redis_7001.log"
第5处: bind 127.0.0.1 ————> 值 改成 本机IP(可通过ifconfig查询)
第6处: protected-mode yes ————> 值 改成 no
第7处: # cluster-enabled yes ————> 去掉注释
第8处: # cluster-config-file nodes-6379.conf ————> 去掉注释 并把数字改成对应端口号,如这里是7001
第9处: # cluster-node-timeout 15000 ————> 去掉注释
第10处: appendonly no ————> 值 改成 yes
8.脚本的内容
startCluster.sh
cd /usr/local/software/rediscluster/redis7001
./redis-server ./redis-7001.conf
cd /usr/local/software/rediscluster/redis7002
./redis-server ./redis-7002.conf
cd /usr/local/software/rediscluster/redis7003
./redis-server ./redis-7003.conf
cd /usr/local/software/rediscluster/redis7004
./redis-server ./redis-7004.conf
cd /usr/local/software/rediscluster/redis7005
./redis-server ./redis-7005.conf
cd /usr/local/software/rediscluster/redis7006
./redis-server ./redis-7006.conf
createCluster.sh ip为配置文件里bind配的值
./redis-cli --cluster create {ip}:7001 {ip}:7002 {ip}:7003 {ip}:7004 {ip}:7005 {ip}:7006
shutdownCluster.sh
cd /usr/local/software/rediscluster/redis7001
./redis-cli -h 106.54.33.142 -p 7001 shutdown
cd /usr/local/software/rediscluster/redis7002
./redis-cli -h 106.54.33.142 -p 7002 shutdown
cd /usr/local/software/rediscluster/redis7003
./redis-cli -h 106.54.33.142 -p 7003 shutdown
cd /usr/local/software/rediscluster/redis7004
./redis-cli -h 106.54.33.142 -p 7004 shutdown
cd /usr/local/software/rediscluster/redis7005
./redis-cli -h 106.54.33.142 -p 7005 shutdown
cd /usr/local/software/rediscluster/redis7006
./redis-cli -h 106.54.33.142 -p 7006 shutdown
9.以上工作做完后开始安装一些基本软件
yum -y install gcc ## make install 命令需要此环境
yum -y intall ruby ## 安装ruby(此时安装的可能使低版本的)
curl -L get.rvm.io | bash -s stable ## 安装rvm
source /usr/local/rvm/scripts/rvm ## 使安装的rvm立即生效
rvm install 2.4.1 ## 通过rvm来安装ruby高级版本
gem install redis ## 通过ruby的工具包gem来安装redis接口
顺利到此,则运行ruby脚本的环境已具备
10.最后通过以下脚本启动
./startCluster.sh
ps -ef| grep redis
./createCluster.sh
回车,等会儿然后输入yes即可
11.安装
yum install unix2dos
12.通过自己本地写个main方法读取excel中的信息,输入到redis.txt文件中,类似下面这种格式
set key1 value1
set key2 value2
...
然后将redis.txt上传到服务器,执行以下命令,将文件格式转化下
unix2dos redis.txt
13.再执行以下命令将所有数据导入到redis中
cat redis.txt | redis-cli -c -h host -p port
至此终于以最快的速度完成任务了,本文部分内容参考网络,亲自验证,不足之处欢迎指正,后续有时间再好好了解了解redis,欢迎阅读,拜拜!