采用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版的以后再发