最近有个需求,需要把五千万条数据批量写入redis中,方法倒是有很多种!效率最高的就是通过redis-cl管道的方式写入

一:先看看命令

cat redis.txt | redis-cli -h 127.0.0.1 -a password - p 6379 --pipe

结构很简单 redis.txt 是你的文件名称 后面是你的客户端

二:redis.txt 的 文件格式

2.1 redis.txt的格式一

有两种文件格式 都是可以的

eg:  set yutes testsss

*3
$3
set
$5
yutes
$7
testsss *3
$3
set
$3
ymy
$9
testvalue

解释:

eg:

*3 表示有三个字符

$3 表示 set字符长度为3 也就是我们的命令

$5表示 yutes的长度为5 也就是我们的key

$7表示 testsss的长度为7 也就是我们的value

不同的字符直接 需要用换行隔开 例如紧接着下一个是  set ymy testvalue

另外一种方式 就比较简单直观

2.2 redis.txt的格式二

set yutes testsss
set ymy testvalue

把需要的自己这样写就行

三:文件格式转码

unix2dos  redis.txt 

上面的命令会去掉行尾的^M符号

四:执行命令就可以了 如图

四:总结

导入3250万数据大概用了 1分30秒左右

而这种方式 用了30多分钟!

遇到的坑

1: 没有 unix2dos 命令

apt install  unix2dos  没有成功 提示 找不到 unix2dos pkg

更新 apt ,sudo apt update  ,但是仍然找不到  unix2dos

添加 apt的源

vim /etc/apt/sources.list

可以参考链接 https://www.cnblogs.com/webnote/p/5767853.html

我的list为:

deb http://archive.ubuntu.com/ubuntu bionic main
           deb http://archive.ubuntu.com/ubuntu bionic-security main
           deb http://archive.ubuntu.com/ubuntu bionic-updates main
           deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse

然后在重新sudo apt update 在  apt install unix2dos 或者 sudo apt-get install tofrodos

2: 上面的文件格式转码是

是 unix2dos filename 而不是 dos2unix filename

3: 集群模式下 如何写入

如果不通过 pipe 我们可以通过 redis-cli -c 来启动redis集群模式

cat redis.txt | redis-cli -c -h 127.0.0.1 -a password - p 6379

但是通过 --pipe 来启动集群模式的话 会 提示 MOVEN *** 172.20.**** 错误

那么解决方案有两种

一:暴力型的

你在集群模式下 --pipe 你会发现 key值的redis槽点在 此节点上 就写入成功了 不在此节点 就没有写入成功

那我们可以把每个节点跑 --pipe 一次,那么每个节点 就会写入自己的数据

二:细致型

通过key 的哈希值 区分槽点,通过节点拿到槽点,,嗯嗯  有点麻烦!详细看链接

可以参考链接:https://blog.csdn.net/kevin_pso/article/details/53945053

参考文档:https://blog.csdn.net/u014078154/article/details/79316430

redis-cli 通过管道 --pipe 快速导入数据到redis中的更多相关文章

  1. 1118ALTER TABLE tabname DISCARD TABLESPACE快速导入数据利用表空间

    -- 快速导入数据如果你有.ibd文件的一个干净的备份,你可以按如下操作从被起源的地方恢复它到MySQL安装中:相当快速 1. 发出这个ALTER TABLE语句: 2. ALTER TABLE tb ...

  2. mysql导入数据到oracle中

    mysql导入数据到oracle中. 建立Oracle表: CREATE TABLE "GG_USER" ( "USERID" BYTE) NOT NULL, ...

  3. Oracle快速导入数据工具

    sqlldr是oracle自带的快速导入批量数据的工具,常用于性能测试.考虑手工构造控制文件较为繁琐,因此使用脚本完成批量数据的自动导入. 基本知识 sqlldr命令语法 sqlldr dbname/ ...

  4. MySQL 之 LOAD DATA INFILE 快速导入数据

    SELECT INTO OUTFILE > help select; Name: 'SELECT' Description: Syntax: SELECT [ALL | DISTINCT | D ...

  5. Redis——redis使用redis-dump,redis-load导出导入数据——【三】

    来源 https://www.cnblogs.com/dadonggg/p/8662455.html https://blog.csdn.net/chenxinchongcn/article/deta ...

  6. SqlLite用SQLiteTransaction快速导入数据

    mysql与sql server都有整表导入的类库,但是查遍了资料发现sqlLite没有,除非自己去写个,发现用SQLiteTransaction导入数据也很快,附上代码 /// <summar ...

  7. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  8. sqoop导入数据到hive中元数据问题

    简单配置了sqoop之后开始使用,之前用的时候很好用,也不记得有没有启动hivemetastore,今天用的时候没有启动,结果导入数据时,如果使用了db.tablename,就会出现找不到数据库的错, ...

  9. 使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

    在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb ...

随机推荐

  1. Android Studio项目用Git上传至码云(OSChina)

    工具: Git安装(官网下载,默认安装即可). 步骤一: 新建一个Android Studio项目: 步骤二: 申请OSChina账号.登陆并创建新项目 1. 2. 3.点击复制,下面在Android ...

  2. 工具资源系列之给虚拟机装个windows

    前面我们介绍了如何在 mac 宿主机安装 VMware 虚拟机软件,本节我们将继续介绍如何给虚拟机安装镜像,切换不同的操作系统. VMware 软件是容器,镜像是内核,这里的镜像指的是操作系统. 下载 ...

  3. 常见的异步方式async 和 await

    之前研究过c#的async和await关键字,幕后干了什么,但是不知道为什么找不到相关资料了.现在重新研究一遍,顺便记录下来,方便以后查阅. 基础知识 async 关键字标注一个方法,该方法返回值是一 ...

  4. 深入浅出KNN算法(一) KNN算法原理

    一.KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学 ...

  5. 如何从GitHub下载csv文件

    当打开存.csv文件的页面时,不用直接点击页面的Download,这样会使csv文件直接用浏览器打开. 要点击Raw按钮,鼠标右键,文件另存为,可以直接把csv文件下载到本地.

  6. SQLServer更改用户定义的数据库角色

    更改用户定义的数据库角色注意事项 需具有以下一项或多项权限或成员身份才能运行此命令: 对角色具有 ALTER 权限 对数据库具有 ALTER ANY ROLE 权限 具有 db_securityadm ...

  7. 开发环境---->服务器(数据库迁移Migration)

    1.查找服务器环境迁移记录表的最近一次迁移名称 SELECT * FROM __efmigrationshistory; 最后一次:20190225075007_UpdateSocialApplyCo ...

  8. Map根据value值进行倒序排列

    public List<Map.Entry<Integer,BigDecimal>> sortByMapValue(HashMap<Integer, BigDecimal ...

  9. day正则表达式补充

    # 2.正则 # 方法:findall | match | split | sub# a = 10# print(a.__hash__())# def fn():# pass# print(fn.__ ...

  10. 揽货最短路径解决方案算法 - V2(增加了时间维度-客户允许的服务时间段,C#/JAVA同步实现,带python作图)

    继上篇,这里改进增加了客户允许服务的时间范围这个维度,并且把C#版本翻译成java,加强了更加形象的图表展示路径(继续是用python的matplotlib作图). 这里的时间范围维度是指:每个客户都 ...