• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

从MySQL到Redis,提拔数据迁移的效率_mysql

mysql 搞代码 7年前 (2018-06-07) 111次浏览 已收录 0个评论

mysql到Redis,提升数据迁移的效率

题外话:看到一篇不错的从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

 

附上原文链接:从MySQL到Redis,提升数据迁移的效率

欢迎大家阅读《从MySQL到Redis,提拔数据迁移的效率_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:从MySQL到Redis,提拔数据迁移的效率_mysql
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址