Heim >Datenbank >MySQL-Tutorial >一步完成MySQL向Redis迁移

一步完成MySQL向Redis迁移

WBOY
WBOYOriginal
2016-06-07 15:13:33916Durchsuche

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 在把一个大表从 MySQL 迁移到 Redis 时,你可能会发现,每次提

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  在把一个大表从 MySQL 迁移到 Redis 时,你可能会发现,每次提取、转换、导入一条数据是让人难以忍受的慢!这里有一个技巧,你可以通过使用管道把 MySQL 的输出直接输入到 redis-cli输入端,这可以使两个数据库都能以他们的最顶级速度来运行。

  使用了这个技术,我把 800 万条 MySQL 数据导入到 Redis 的时间从 90 分钟缩短到了两分钟。

  Mysql到Redis的数据协议

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

  我的统计表:

  1.CREATE TABLE events_all_time (

  2.  id int(11) unsigned NOT NULL AUTO_INCREMENT,

  3.  action varchar(255) NOT NULL,

  4.  count int(11) NOT NULL DEFAULT 0,

  5.  PRIMARY KEY (id),

  6.  UNIQUE KEY uniq_action (action)

  7.);

  准备在每行数据中执行的redis命令如下:

  HSET events_all_time [action] [count]

  按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:

  1.-- events_to_redis.sql

  2.3.SELECT CONCAT(

  4.  "*4\r\n",

  5.  '$', LENGTH(redis_cmd), '\r\n',

  6.  redis_cmd, '\r\n',

  7.  '$', LENGTH(redis_key), '\r\n',

  8.  redis_key, '\r\n',

  9.  '$', LENGTH(hkey), '\r\n',

  10.  hkey, '\r\n',

  11.  '$', LENGTH(hval), '\r\n',

  12.  hval, '\r'

  13.)

  14.FROM (

  15.  SELECT

  16.  'HSET' as redis_cmd,

  17.  'events_all_time' AS redis_key,

  18.  action AS hkey,

  19.  count AS hval

  20.  FROM events_all_time

  21.) AS t

  ok, 用下面的命令执行:

  mysql stats_db --skip-column-names --raw

  很重要的mysql参数说明:

  --raw:使mysql不转换字段值中的换行符。

  --skip-column-names:使mysql输出的每行中不包含列名。

一步完成MySQL向Redis迁移

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn