mysql中的数据导入redis

采用redis的pipe可以加速传送速度
Using pipelining to speedup Redis queries

说明:redis官方文档

1.创建mysql表,随意插入几条数据

DROP TABLE IF EXISTS `law_alarm`;
CREATE TABLE `law_alarm` (
  `id` int(10) NOT NULL,
  `lawTypeId` varchar(10) DEFAULT NULL,
  `alarmTypeId` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of law_alarm
-- ----------------------------
INSERT INTO `law_alarm` VALUES ('0', '1', '001');
INSERT INTO `law_alarm` VALUES ('1', '001', '802');
INSERT INTO `law_alarm` VALUES ('3', '001', '803');
INSERT INTO `law_alarm` VALUES ('4', '001', '054');
INSERT INTO `law_alarm` VALUES ('6', '003', '001');
INSERT INTO `law_alarm` VALUES ('8', '003', '076');
INSERT INTO `law_alarm` VALUES ('9', '003', '055');
INSERT INTO `law_alarm` VALUES ('10', '001', '071');
INSERT INTO `law_alarm` VALUES ('11', '001', '805');
INSERT INTO `law_alarm` VALUES ('12', '003', '002');
INSERT INTO `law_alarm` VALUES ('13', '001', '081');

2.创建批量脚本:

  • windows下:
  • windows下:
  • windows下:

保存名为mmtest.sql的文件

SELECT CONCAT(
   "*8\n",
   '$',LENGTH(redis_cmd),'\n',redis_cmd,'\n',
   '$',LENGTH(redis_key),'\n',redis_key,'\n',
   '$',LENGTH(hkey1),'\n',hkey1,'\n','$',LENGTH(hval1),'\n',hval1,'\n',
   '$',LENGTH(hkey2),'\n',hkey2,'\n','$',LENGTH(hval2),'\n',hval2,'\n',
   '$',LENGTH(hkey3),'\n',hkey3,'\n','$',LENGTH(hval3),'\n',hval3
)FROM(
   SELECT 'HMSET' AS redis_cmd,
   concat_ws(':','law_alarm', id) AS redis_key,
   'id' AS hkey1, id AS hval1,
   'lawTypeId' AS hkey2, lawTypeId AS hval2,
   'alarmTypeId' AS hkey3, alarmTypeId AS hval3
   From law_alarm
)AS t

解释:
*8\n表示数组数量,使用了8个键值对,所以使用8个数组;
\n是windows中间隔符;
第二行的 ‘$’,LENGTH(redis_cmd),’\n’,redis_cmd,’\n’,
$表示长字符串;
LENGTH(redis_cmd)表示“redis_cmd”这个字符串的长度;
redis_cmd表示字符串变量。
如果有空数据的话,可以改动一下,如下

SELECT CONCAT(
   "*8\n",
   '$',LENGTH(redis_cmd),'\n',redis_cmd,'\n',
   '$',LENGTH(redis_key),'\n',redis_key,'\n',
   '$',LENGTH(hkey1),'\n',hkey1,'\n','$',LENGTH(hval1),'\n',hval1,'\n',
   '$',LENGTH(hkey2),'\n',hkey2,'\n','$',LENGTH(hval2),'\n',hval2,'\n',
   '$',LENGTH(hkey3),'\n',hkey3,'\n','$',LENGTH(hval3),'\n',hval3
)FROM(
   SELECT 'HMSET' AS redis_cmd,
   concat_ws(':','law_alarm', id) AS redis_key,
   'id' AS hkey1, id AS hval1,
   'lawTypeId' AS hkey2, (case when lawTypeId IS NULL then 'null' ELSE lawTypeId end ) AS hval2,
   'alarmTypeId' AS hkey3, alarmTypeId AS hval3
   From law_alarm
)AS t

3.运行命令

mysql -uroot -proot traffic_police --default-character-set=utf8 --skip-column-names --raw < mmtest.sql | D:\redis\redis-cli --pipe

在mysql安装目录下运行;
-uroot -proot为用户名密码;
traffic_police为你数据库名;
–raw < mmtest.sql 表示将mmtest.sql的sql语句内容粘贴到mysql里执行;
D:\redis\redis-cli为redis-cli的目录;
redis-cli --pipe 表示使用redis pipe管道把数据导入到redis中;

如果redis有密码,还要加上: -h 127.0.0.1 -a 123456

  mysql -uroot -proot traffic_police --default-character-set=utf8 --skip-column-names --raw < mmtest.sql | D:\redis\redis-cli --pipe -h 192.168.0.138 -a 123456

在这里插入图片描述
遇到了一些错误以后再说

4.取key

hgetall law_alarm:8
在这里插入图片描述

另外linux版的以后再发

猜你喜欢

转载自blog.csdn.net/pz641/article/details/102565272