开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Redis从文件中批量插入数据

简介:
+关注继续查看

简介


在redis中,有时候需要批量执行某些命令,但是在redis的redis-cli下,只能一条条的执行指令,实在太麻烦了!
想到这,你是不是蓝瘦香菇? 如果能将要执行的指令一行行存储到文件中,然后用一行命令将文件中的命令一次执行完成,那肯定爽死了!
所以下面,我要带你冒着手指怀孕的危险,让你爽一把:

创建文件


首先创建一个txt文件,将要执行的指令一行一行写进去,当然,你也可以从其他文件拷贝进来。

server$ vim d1.txt 

set myk12 v1
zadd zset12 0 a 1 b 3 c
sadd sset12 e f g hh
set myk22 v2
hset myset12 k1 v1
hmset myset22 k2 v2 k3 v3 k4 v4
set myk32 v3

转码


redis-cli中只支持dos格式的换行符 \r\n ,如果你在Linux下、Mac下或者Windows下创建的文件,最好都转个码。没有转码的文件,执行会失败。
下面是转码指令, 只需要在命令后加入要转码的文件即可:

server> unix2dos d1.txt 
unix2dos: converting file d1.txt to DOS format...

如果使用unix2dos这个命令进行转码失败,提示没有这个命令,就需要进行安装,我在在mac下用brew install unix2dos 安装的unix2dos转码工具

brew install unix2dos
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
... 部分省略 ...
==> Pouring dos2unix-7.3.4.sierra.bottle.tar.gz
/usr/local/Cellar/dos2unix/7.3.4: 23 files, 344.3K

如果是CentOS,使用yum install unix2dos安装unix2dos转码工具。

yum install unix2dos
已加载插件:fastestmirror, security
... 部分省略 ...
已安装:
  unix2dos.x86_64 0:2.2-35.el6
完毕!

执行导入


文件转码完成后,就可以导入,导入使用cat和redis-cli命令组合,一个用来读取文件内容,一个用来发送文件到redis执行,如果要导入的文件和redis在同一台服务器上,可以直接将本地文件中的指令导入redis执行

server> cat d1.txt | redis-cli 
OK
(integer) 3
(integer) 4
OK
(integer) 1
OK
OK

我们可以看到,你输入多少条指令,就会有多少行返回记录,并且告诉你它们的执行结果,如果你导入的指令比较多,可以使用--pipe 这个参数来启用pipe协议,它不仅仅能减少返回结果的输出,还能更快的执行指令。

server> cat d1.txt | redis-cli --pipe
All data transferred. Waiting for the last reply...  
Last reply received from server.  
errors: 0, replies: 7  

如果你要导入数据在远程主机上,而且端口也是自定义的,那么可以使用下面的方法将文件导入到远程服务器:

server> cat d1.txt | redis-cli -p 6380 -h 192.168.1.166 --pipe
All data transferred. Waiting for the last reply...  
Last reply received from server.  
errors: 0, replies: 7  

数据导入完成后,我们就应该去redis看看是不是导入成功了:

server$ redis-cli -p 6380
127.0.0.1:6380> get myk1
"v1"
127.0.0.1:6380> hgetall myset1
1) "k1"
2) "v1"
127.0.0.1:6380> hgetall myset2
1) "k2"
2) "v2"
3) "k3"
4) "v3"
5) "k4"
6) "v4"

是不是很爽,以后redis中有什么数据要处理,直接一行命令搞定!

总结:


  • redis官方有批量导入的方法,使用脚本将文件转成redis协议支持的格式,可惜我测试时只能使用set k1 v1 这类包含三个元素的指令完成批量导入。遇到四个元素的,提示执行成功,但是数据就是看不到。
  • 我使用的redis版本是2.8.0以上,如果你的版本较低,执行某个指令失败,可能是版本太低了
  • 另外强调一下转码的重要性,如果转码失败,导入肯定失败
  • 导入指令文件最好不要在一行结束留空格或者留空行,否则会出现意想不到的问题





本文作者:陈群
本文来自云栖社区合作伙伴rediscn,了解相关信息可以关注redis.cn网站。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Redis之集群环境搭建
前面文章介绍了Redis的主从复制,虽然该模式能够在一定程度上提高系统的稳定性,但是在数据访问量比较大的情况下,单个master应付起来还是比较吃力的,这时我们可以考虑将redis集群部署,本文就来重点给大家介绍下Redis的集群部署操作。
117 0
Redis简单集群配置
参考链接为:http://blog.csdn.net/u014230881/article/details/71123494 比较系统学习和熟练使用Redis命令可参考该教程:http://www.runoob.
991 0
redis 主从、sentinel、集群 搭建
redis 主从、sentinel、集群 搭建 编辑:王振威 日期:2018/07/09 ==前言:== 1、本文介绍redis 主从、哨兵、集群模式的linux(centos7.2)搭建。
3678 0
redis集群搭建
redis集群搭建 Redis集群的搭建Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。 Redis集群至少需要6台服务器。 搭建伪分布式。可以使用一台虚拟机运行6个redis实例。
1788 0
Redis集群搭建
Redis集群搭建
16710 0
redis集群搭建
  Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。
2210 0
搭建Redis集群
为什么要有集群  上一篇随笔说了基本的主从概念以及搭建,一主可以有多从,如果同时访问的量过大(1000w)或者发生自然灾难,主服务肯定就会挂掉,数据服务就挂掉了 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北地区、西南地区、东北地区、台港澳地区机房) 集群的概念 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。
1520 0
Redis 复制与集群
<div class="markdown_views"> <h2 id="复制">复制</h2> <p>为提高高可用性,排除单点故障,redis支持主从复制功能。 <br> 其整体结构是一个有向无环图。</p> <h3 id="同步方式">同步方式</h3> <p>分为两种:</p> <ul> <li>全同步 <br> 全同步是第一次从机连主机是进行的同步,主机会生
2089 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20683
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载