码迷,mamicode.com
首页 > 数据库 > 详细

MySQL导数据到Redis

时间:2015-08-05 00:36:08      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

比较快速的往redis中导入mysql数据的方法

1. 当向Redis中一次性导入大数据时

     可以将所有的插入命令写到一个txt文件中,如插入 key-value

 SET test0 abc
 SET test1 bcd
 SET test3 abcd

  每个SET命令前要留一个空格,保存为data.txt

    然后使用 redis的客户端 redis-cli的管道传输(redis的版本要大于2.6)

      linux下使用命令:

         cat data.txt | redis-cli --pipe

      成功的话就会出现如下结果:

      All data transferred. Waiting for the last reply...

      Last reply received from server.

      errors: 0, replies: 3

2. 使用符合redis协议格式的数据

       虽然第一种方法比较方便,不过存在的问题是,有时redis无法正确解释数据,所有推荐的第二种方式

       此协议数据的格式如下: 

*3<cr><lf>
$3<cr><lf>
SET<cr><lf>
$3<cr><lf>
key<cr><lf>
$5<cr><lf>
value<cr><lf>

  意义如下:

       第一行: *3<cr><lf> : 星号*规定格式3参数的个数(如上:SET、key、value) ;<cr>‘\r‘<lf>‘\n‘

       第二、三行: $3<cr><lf>  : $规定格式3对应命令SET的长度(3个字母);<cr><lf>同上

    所以上述格式又可写成:

*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n 

 

3. 使用mysql一次性导入大量数据的原理是一样的

       将数据按上述协议的格式导出来,然后再通过redis-cli --pipe导入

    例子: 

       建表语句:

CREATE TABLE `device_type` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `class` varchar(500) NOT NULL,
  `class_guid` varchar(500) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`),
  KEY `idx_class` (`class`(50),`class_guid`(200))
) ENGINE=MyISAM AUTO_INCREMENT=287 DEFAULT CHARSET=utf8;
SELECT * FROM drivers_lookup_com.driver_files;

  导出数据并转换成redis-cli能处理的格式:

SELECT CONCAT(
   "*8\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‘
)FROM(
   SELECT ‘HMSET‘ AS redis_cmd,
   id AS redis_key,
   ‘name‘ AS hkey1, name AS hval1,
   ‘class‘ AS hkey2,class AS hval2,
   ‘class_guid‘ AS hkey3,class_guid AS hval3
   From device_type
)AS t

  转换的命令如下:

 mysql -h192.168.0.104 -uroot -p123 device --skip-column-names --raw < device.sql | src/redis-cli --pipe

  

 

MySQL导数据到Redis

标签:

原文地址:http://www.cnblogs.com/tommy-huang/p/4703514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!