採用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版的以後再發