ItGo.me - 专注IT技术分享

首页 > Redis > 一步完成 MySQL 向 Redis 迁移

一步完成 MySQL 向 Redis 迁移

时间:2016-08-28来源:网友分享 点击:

从mysql搬一个大表到redis中,你会发现在提取、转换或是载入一行数据时,速度慢的让你难以忍受。这里我就要告诉一个让你解脱的小技巧。使用“管道输出”的方式把mysql命令行产生的内容直接传递给redis-cli,以绕过“中间件”的方式使两者在进行数据操作时达到最佳速度。

一个约八百万行数据的mysql表,原本导入到redis中需要90分钟,使用这个方法后,只需要两分钟。不管你信不信,反正我是信了。

Mysql到Redis的数据协议

redis-cli命令行工具有一个模式,是专门为批量执行命令设计的。这第一步就是把Mysql查询的内容格式化成redis-cli可用的。here we go!


 

我的统计表:

1234567CREATE TABLE events_all_time (  id int(11) unsigned NOT NULL AUTO_INCREMENT,  action varchar(255) NOT NULL,  count int(11) NOT NULL DEFAULT 0,  PRIMARY KEY (id),  UNIQUE KEY uniq_action (action));
准备在每行数据中执行的redis命令如下:
1HSET events_all_time [action] [count]
按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:
123456789101112131415161718192021-- events_to_redis.sql SELECT CONCAT(  "*4\r\n",  '$', LENGTH(redis_cmd), '\r\n',  redis_cmd, '\r\n',  '$', LENGTH(redis_key), '\r\n',  redis_key, '\r\n',  '$', LENGTH(hkey), '\r\n',  hkey, '\r\n',  '$', LENGTH(hval), '\r\n',  hval, '\r')FROM (  SELECT  'HSET' as redis_cmd,  'events_all_time' AS redis_key,  action AS hkey,  count AS hval  FROM events_all_timeAS t
ok, 用下面的命令执行:
1mysql stats_db --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe
很重要的mysql参数说明: 
--raw: 使mysql不转换字段值中的换行符。 
--skip-column-names: 使mysql输出的每行中不包含列名。

一步完成 MySQL 向 Redis 迁移

一步完成 MySQL 向 Redis 迁移   讨论


windows redis 集群搭建(一)

Redis 是比较著名的nosql 了,可以拿来当数据用也可以当缓存用,由于他支持的数据类型比memcache多,当缓存也不错,既然牵扯到缓存,大数据的情况下需要做集群处理,目前 redis也支持,不过还...

Redis的部署使用文档

Redis的部署使用文档 简述: redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符 串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/p...

redis集群部署及常用的操作命令(上)

简单说下自己测试搭建简单的redis集群的大体步骤: 1.首先你的有6个redis(官方说最少6个,3master,3slave),可以先在一台机器上搭建,搭建到多台上应该只需要改变启动命令即可(可能需要一...

从mysql搬一个大表到redis中,你会发现在提取、转换或是载入一行数据时,速度慢的让你难以忍受。这里我就要告诉一个让你解脱的小技巧。使用管道输出的方式把mysql命令行产生的内容直接传
------分隔线----------------------------