mysql導入redis


                                                                 將mysql中數據庫指定表導入redis

如何將mysql中某個數據庫中的表數據快速導入redis?

以下將演示將本地127.0.0.1中數據庫test中的表t_abc導入本地redis中。步驟如下:

1.建表語句:

 
CREATE TABLE `t_abc` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `orderNo` varchar(100) DEFAULT NULL,
  `createtime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=131073 DEFAULT CHARSET=gbk

 

2.插入測試數據:

INSERT INTO `test`.`t_abc`(NAME,orderNo,createTime) VALUES ('zhangsan1','NO000001',NOW());

執行多次以下sql,可以快速導入數據:

INSERT t_abc(NAME,orderNo,createTime) SELECT t.name,t.orderNo,t.createTime FROM t_abc t;

 

3.mysql導入redis語句:

mysql -hlocalhost -uroot -proot -Dtest --default-character-set=utf8 --skip-column-names --raw <mysqltoredis.sql | redis-cli -h 127.0.0.1 -p 6379 -a 111111 –pipe

 

說明:

1.-h表示數據庫地址,-u表示數據庫用戶名,-p表示數據庫密碼,-D表示哪個數據庫

2. redis-cli -h 127.0.0.1 -p 6379 -a 111111 –pipe ,表示使用pipe管道連接redis

3.mysqltoredis.sql需要自己編寫:

注意:1.因為RESP協議中的分隔符為在Linux下是\r\n,而在Windows下則為\n

           2.第一行中的*10\n,10代表resp協議中數組的個數,\n表示換行符

           3.在Linux下,最后變成了\r,而在Windows下就直接什么都沒有了。

           4.其中表t_abc為test數據庫中的表,需要導入那列就查詢哪列

 

在window中如下:

SELECT CONCAT(
   "*10\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,'\n',
   '$',LENGTH(hkey4),'\n',hkey4,'\n','$',LENGTH(hval4),'\n',hval4
)FROM(
   SELECT 'HMSET' AS redis_cmd,
   CONCAT_WS(':','order', id) AS redis_key,
   'id' AS hkey1, NAME AS hval1,
   'name' AS hkey2, NAME AS hval2,
   'orderNo' AS hkey3, orderNo AS hval3,
   'createtime' AS hkey4, UNIX_TIMESTAMP(createtime) AS hval4
   FROM t_abc
)AS t

 

在linux中如下:

SELECT CONCAT(
   "*10\r\n",
   '$',LENGTH(redis_cmd),'\r\n',redis_cmd,'\r\n',
   '$',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 'HMSET' AS redis_cmd,
   CONCAT_WS(':','order', id) AS redis_key,
   'id' AS hkey1, NAME AS hval1,
   'name' AS hkey2, NAME AS hval2,
   'orderNo' AS hkey3, orderNo AS hval3,
   'createtime' AS hkey4, createtime AS hval4
   FROM t_abc
)AS t

 

 

4.常見問題:

ERR Protocol error: expected '$', got ' '

報這個錯,需要檢查第一行中*10\n 數字和數組的參數是否匹配

 


免責聲明!

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



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