linux下mysql數據導入到redis


自Redis 2.6以上版本起,Redis支持快速大批量導入數據,即Pipe傳輸。通過將要導入的命令轉換為Resp格式,然后通過MySQL的concat()來整理出最終導入的命令集合,以達到快速導入的目的。

1.建立測試表

CREATE TABLE `order` (
  `orderid` varchar(38) DEFAULT NULL,
  `ordertime` datetime DEFAULT NULL,
  `ordermoney` decimal(20,0) DEFAULT NULL,
  `orderstatus` char(1) DEFAULT NULL,
  `version` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.插入數據

INSERT INTO `order` VALUES ('1', '2018-7-29 00:06:04', 45, '1', 1);
INSERT INTO `order` VALUES ('2', '2018-7-18 00:06:39', 46, '1', 2);
INSERT INTO `order` VALUES ('3', '2018-7-3 00:06:50', 12, '1', 1);

3.編寫查詢腳本,並將該腳本保存成order.sql文件

SELECT CONCAT(
 '*10\r\n',   -- *表示數組,10表示數組元素個數*,\r\n是規定分隔符,10這個數字根據下面紅底字段數量進行調整
   '$', LENGTH(redis_cmd), '\r\n', redis_cmd, '\r\n', --$表示長字符串,LENGTH(redis_cmd)表示字符串長度,redis_cmd字符串變量
   '$', LENGTH(redis_key), '\r\n', redis_key, '\r\n',
   '$', LENGTH(hkey1),'\r\n',hkey1,'\r\n','$',LENGTH(hval1),'\r\n',hval1,'\r\n',
   '$', LENGTH(hkey2),'\r\n',hkey2,'\r\n','$',LENGTH(hval2),'\r\n',hval2,'\r\n',
   '$', LENGTH(hkey3),'\r\n',hkey3,'\r\n','$',LENGTH(hval3),'\r\n',hval3,'\r\n',
   '$', LENGTH(hkey4),'\r\n',hkey4,'\r\n','$',LENGTH(hval4),'\r\n',hval4,'\r'
)
FROM (
 SELECT
 'HSET' AS redis_cmd,
 CONCAT('order:info:',orderid) AS redis_key,
 'ordertime' AS hkey1, ordertime AS hval1,
 'ordermoney' AS hkey2, ordermoney AS hval2,
 'orderstatus' AS hkey3, orderstatus AS hval3,
 'version' AS hkey4, `version` AS hval4
 FROM `order`
) AS t

4.執行導入命令

mysql -h host -uroot -p123456 test --default-character-set=utf8 --skip-column-names --raw < /usr/redis/order.sql | /usr/redis/redis-cli -h host -p 6379 -a 123456 --pipe

#
-h host -uroot -p123456 test 分別為:mysql遠程地址,用戶名,密碼,數據庫名
#/usr/redis/order.sql | /usr/redis/redis-cli 分別為sql文件和redis客戶端文件目錄的地址
#-h host -p 6379 -a 123456 分別為redis遠程地址,端口,密碼


 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM