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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章