http://doc.redisfans.com/index.html

cat data.txt | redis-cli --pipe

附从MYSQL迁移的一个高效技巧!

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

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

Mysql到Redis的数据协议

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

我的统计表:

 
 
  1. CREATETABLEevents_all_time(
  2. idint(11)unsignedNOTNULLAUTO_INCREMENT,
  3. actionvarchar(255)NOTNULL,
  4. countint(11)NOTNULLDEFAULT0,
  5. PRIMARYKEY(id),
  6. UNIQUEKEYuniq_action(action)
  7. );

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

 
 
  1. HSETevents_all_time[action][count]

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

 
 
  1. --events_to_redis.sql
  2. SELECTCONCAT(
  3. "*4\r\n",
  4. '$',LENGTH(redis_cmd),'\r\n',
  5. redis_cmd,'\r\n',
  6. '$',LENGTH(redis_key),'\r\n',
  7. redis_key,'\r\n',
  8. '$',LENGTH(hkey),'\r\n',
  9. hkey,'\r\n',
  10. '$',LENGTH(hval),'\r\n',
  11. hval,'\r'
  12. )
  13. FROM(
  14. SELECT
  15. 'HSET'asredis_cmd,
  16. 'events_all_time'ASredis_key,
  17. actionAShkey,
  18. countAShval
  19. FROMevents_all_time
  20. )ASt

ok, 用下面的命令执行:

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

很重要的mysql参数说明:

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

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




更多相关文章

  1. Linux 常用命令使用英文全称
  2. Linux命令-定时任务命令:crontab
  3. linux常用命令大全(转)
  4. Linux学习第二天-文件系统和简单文件操作命令
  5. Linux下高频命令分类辑录(基本使用篇)
  6. Linux netstat命令详解(转)
  7. linux diff(differential) 命令详解
  8. Linux环境下修改MySQL数据库存储引擎
  9. linux watch——重复执行同一命令

随机推荐

  1. 第五章C++:语句的相关介绍
  2. C#_调用封装的一个类实现导出Excel表格的
  3. C# 使用NPOI生成Word文档(按照模板)
  4. 第四章C++:表达式概念-运算符的应用
  5. 如何看待C#中的out和ref?探讨它们之间的区
  6. 第三章C++:字符串string、向量vector和数
  7. 基于汇编的 C/C++ 协程(用于服务器)的实现
  8. 第二章C++:变量和基本类型
  9. (C++)错误的map删除操作和STL中容器的迭代
  10. 第一章C++:函数返回值、GNU编译器命令