提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
使用管道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、测试
以上,仅作学习记录!