如何高效把百万数据从MySQL导入redis

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

使用管道pipe高效地把mysql同步数据到redis中去。下面试windows下的玩法

一、启动redis

windows环境下用以下命令写一个启动redis服务的快捷程序 :redis-server.bat

@echo off
title redis-server
set ENV_HOME="D:\Java\redis\Redis-x64-3.2.100"
D:
color 03
cd %ENV_HOME%
redis-server.exe redis.windows.conf
exit

登记redis使用的快捷程序:redis-start.bat

@echo off
title redis-cli
set ENV_HOME="D:\Java\redis\Redis-x64-3.2.100"
D:
color 0a
cd %ENV_HOME%
redis-cli.exe -h 127.0.0.1 -p 6379

二、通过pipe管道传输,将mysql中的数据转入redis

1、创建表(示例):

CREATE TABLE `t_book` (
  `id` bigint(10) NOT NULL AUTO_INCREMENT,
  `number` int(15) NOT NULL,
  `NAME` varchar(100) NOT NULL DEFAULT '',
  `descrition` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8;

2、存储过程插入百万数据

DELIMITER $$

USE `test`$$


DROP PROCEDURE IF EXISTS `test_insert`$$

CREATE DEFINER=`root`@`%` PROCEDURE `test_insert`()

BEGIN

        DECLARE i INT DEFAULT 1;

        WHILE i<= 1000000

            DO

            INSERT INTO t_book(id,number,NAME,descrition)

            VALUES (i, CONCAT("00000",i) , CONCAT('book',i)

            , CONCAT('book_description',i));    

            SET i=i+1;

        END WHILE ;

        COMMIT;

    END$$

DELIMITER ;

CALL test_insert();

在这里插入图片描述

3、编写脚本

编写SQL脚本,将mysql中的数据转化成为Redis-cli可以识别的格式:

*3\n    #表明命令中包含的参数个数
$4\n    #表明第一个参数的长度
HSET\n   #第一个参数,注意各项关键字也都是参数
$3\n    #表明第二个参数的长度
AAA\n   #第二个参数
$4\n    #表明第三个参数的长度
BBB\n  #第三个参数

利用mysql转化成规定格式:

SELECT
	CONCAT(
	"*4\n",
	"$",
	LENGTH( redis_cmd ),
	"\n",
	redis_cmd,
	"\n",
	"$",
	LENGTH( redis_key ),
	"\n",
	redis_key,
	"\n",
	"$",
	LENGTH( hkey ),
	"\n",
	hkey,
	"\n",
	"$",
	LENGTH( hval ),
	"\n",
	hval,
	"" 
	) 
FROM
	( SELECT "HSET" AS redis_cmd, id AS redis_key, NAME AS hkey, descrition AS hval FROM test.t_book ) AS t 
	LIMIT 1000000;

在这里插入图片描述
保存sql到mysql-to-redis.sql,放到安装redis的文件夹下:
在这里插入图片描述

4、执行脚本把MySQL数据导入redis

mysql -h 127.0.0.1 -uroot -proot -Dtest --skip-column-names --raw < mysql-to-redis.sql | redis-cli.exe --pipe
-u 是数据库用户名
-p 是数据库密码
-D 指定数据库,也可以直接输入数据库名字
–raw 使mysql不转换字段值中的换行符
–skip-column-names 使mysql输出的每行中不包含列名
| 管道符号(意思是将该符号左边的运算结果提交给右边的命令处理,这里是先通过MySQL到处数据,然后用redis-cli导入到Redis)
redis-cli 是调用Redis的客户端命令
–pipe 使用管道传输

在这里插入图片描述
导入效率非常快

5、测试

在这里插入图片描述

以上,仅作学习记录!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值