程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 一步完成MySQL向Redis遷移

一步完成MySQL向Redis遷移

編輯:MySQL綜合教程

在把一個大表從 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命令如下:

  1. 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, 用下面的命令執行:

  1. mysql stats_db --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe 

很重要的mysql參數說明:

--raw: 使mysql不轉換字段值中的換行符。

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

原文出處:http://www.oschina.net/translate/mysql-to-redis-in-one-step

英文原文:MySQL to Redis in One Step

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved