REDIS从LINUX文件写入批量数据
16lz
2021-01-22
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!
我的统计表:
- CREATETABLEevents_all_time(
- idint(11)unsignedNOTNULLAUTO_INCREMENT,
- actionvarchar(255)NOTNULL,
- countint(11)NOTNULLDEFAULT0,
- PRIMARYKEY(id),
- UNIQUEKEYuniq_action(action)
- );
准备在每行数据中执行的redis命令如下:
- HSETevents_all_time[action][count]
按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:
- --events_to_redis.sql
- SELECTCONCAT(
- "*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'asredis_cmd,
- 'events_all_time'ASredis_key,
- actionAShkey,
- countAShval
- FROMevents_all_time
- )ASt
ok, 用下面的命令执行:
- mysqlstats_db--skip-column-names--raw<events_to_redis.sql|redis-cli--pipe
很重要的mysql参数说明:
--raw: 使mysql不转换字段值中的换行符。
--skip-column-names: 使mysql输出的每行中不包含列名。
更多相关文章
- Linux 常用命令使用英文全称
- Linux命令-定时任务命令:crontab
- linux常用命令大全(转)
- Linux学习第二天-文件系统和简单文件操作命令
- Linux下高频命令分类辑录(基本使用篇)
- Linux netstat命令详解(转)
- linux diff(differential) 命令详解
- Linux环境下修改MySQL数据库存储引擎
- linux watch——重复执行同一命令