从MySQL到Redis 提升数据迁移的效率

场景是从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样可能没什么错,但是速度会非常慢。而如果能够使MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可能就省事多了。
根据测试800w的数据迁移,时间从90分钟缩短到2分钟。
具体案例如下:
MySQL数据表结构:

CREATE 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存储结构:

HSET events_all_time [action] [count]

下面是重点,能过下面SQL语句将MySQL输出直接变更成redis-cli可接收的格式:

– 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_time
) AS t

  然后用管道符重定向输出即可:

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

时间: 2024-10-06 00:02:36

从MySQL到Redis 提升数据迁移的效率的相关文章

通过Gearman实现MySQL到Redis的数据同步

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached.File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器. 但是往往我们又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能. 所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache.而这种需求目前还没有看

浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移

http://blog.csdn.net/dba_waterbin/article/details/8996872 ㈠ Redis 与 MySQL 的耦合性            在业务架构早期.我们便该"吃着碗里的看着锅里的".切莫让MySQL 有梦.而Redis 无心    毕竟.有些关系型的结构不适合放到Redis跑."男女搭配.干活不累"嘛.推荐让MySQL与Redis喜结连理        其次.这 2 人.一般是在不同场景做选择.而不会在性能上选择. 

数据迁移实战:基于Kettle的Mysql到DB2的数据迁移

From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词较常用在数据仓库,但其对象并不限于数据仓库. 二.Kettle简单说明 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定

mysql学习之旅-数据迁移-备份-恢复

1.数据迁移 将/tmp/t3.txt中的数据导入到t3表中,数据以逗号为分割符 load data infile ‘/tmp/t3.txt’ into table t3 fields terminated by ','; 将table2表中的数据导出为文件data.txt,以逗号为分隔符 SELECT * INTO OUTFILE 'data.txt' ->     FIELDS TERMINATED BY ',' ->     FROM table2; #####在mysql命令行内执行

redis的数据迁移

redis-migrate-tool工具是由唯品会开源的,用于在多种redis架构间迁移数据.该工具基于redis复制,在迁移过程中,源redis集群仍可对外提供服务:若目标集群是Twemproxy,其会将数据直接导入后端的redis节点:能通过监控端口,查看迁移状态,且迁移完成后,可进行抽样检查. 安装redis-migrate-tool # yum install automake libtool autoconf bzip2 -y # git clone https://github.co

MySQL向redis同步数据

##创建表及数据 CREATE 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) ); insert into events_all_time(action,count) values

Redis单机数据迁移至Sentinel集群

1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0

MySQL表字段的数据迁移

update ecm_order_goods, ecm_goods, ecm_orderset ecm_order_goods.eu_point=ecm_goods.eu_point, ecm_order_goods.au_point=ecm_goods.au_point where ecm_order_goods.goods_id=ecm_goods.goods_id and ecm_order.order_id = ecm_order_goods.order_id and ecm_order

一步完成MySQL向Redis迁移

在把一个大表从 MySQL 迁移到 Redis 时,你可能会发现,每次提取.转换.导入一条数据是让人难以忍受的慢!这里有一个技巧,你可以通过使用管道把 MySQL 的输出直接输入到 redis-cli输入端,这可以使两个数据库都能以他们的最顶级速度来运行. 使用了这个技术,我把 800 万条 MySQL 数据导入到 Redis 的时间从 90 分钟缩短到了两分钟. Mysql到Redis的数据协议 redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的.这第一步就是把Mysq