题外话:看到一篇不错的从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导入到Redis。一种有效的方法是利用"管道输出"(Pipe)技术,直接将MySQL命令行的输出作为输入传递给Redis的命令行工具redis-cli,避免中间数据转换的...
标题中的“canal”的MySQL与“redis/memcached/mongodb”的NoSQL数据实时同步方案,主要涉及了数据库间的数据迁移和实时同步技术。这个话题涵盖了多个关键知识点,包括: 1. **Canal**: Canal是阿里巴巴开源的一个...
1. 数据分片:Redis 集群通过哈希槽(Hash Slots)来实现数据分片,16384 个槽均匀分配到所有节点,数据根据键名的哈希值映射到对应的槽,从而达到分散数据的目的。 2. 节点通信:集群中的节点间通过 gossip 协议...
在本项目中,"Python+Django+MySQL+Redis的医院挂号系统源码"是一个采用现代Web技术构建的医疗...通过学习和理解这个系统,开发者可以深入掌握Python Django开发,同时了解如何整合MySQL和Redis来提升Web应用的性能。
标题中的"oracle+mysql+redis+mqttv3-1.0.2.jar"是一个Java库,它集成了对四种不同类型数据库系统的支持:Oracle、MySQL、Redis以及MQTT V3.1.2。这个单一的JAR文件包含了这些数据库的连接驱动,方便Java开发者在...
8. **双写一致性**:Redis与MySQL之间的数据同步需要考虑一致性问题。 9. **集群模式**:Sentinel监控和自动故障恢复,Cluster实现数据分片。 10. **键槽与槽迁移**:通过一致性哈希确定Key所在的槽,迁移Key以...
迁移数据库,创建数据表 python manage.py migrate 继续运行: python manage.py runserver 启动项目,然后,访问“http://127.0.0.1:8000” 注: 配置文件位于config/local_settings.py 测试登录账号:ozn88917@...
【标题】"若依基础框架(springboot,maven,redis,mysql)"涉及的关键知识点主要涵盖四个核心领域:SpringBoot、Maven、Redis以及MySQL。这些技术在现代IT行业中被广泛应用于构建高效、可扩展的Web应用。 1. **...
在本项目中,开发者使用了Python的Django框架来构建一个简单的博客系统,同时结合了MySQL作为主要的数据存储,以及Redis作为辅助缓存数据库。这是一个常见的Web开发组合,旨在提高应用性能并提供良好的用户体验。接...
总的来说,从Oracle迁移到MySQL涉及多方面的考量,包括数据库替代、工具选择、数据一致性、性能优化等。每个工具都有其优点和缺点,应根据具体项目需求来权衡选择。迁移过程需要谨慎规划和实施,以确保业务连续性和...
MySQL 是一款广受欢迎的开源关系型数据库管理系统...同时,MySQL附带了一系列管理工具,如MySQL Server、MySQL Workbench、MySQL Shell等,便于用户进行数据库配置、监控、备份、恢复、迁移等工作。 社区与生态系统
对于从其他集群(如Codis、Twemproxy等)迁移到Redis Cluster的情况,NineData同样能够提供有效的数据同步支持。 #### 四、测试说明与性能对比 为了验证NineData在数据同步方面的性能表现,采用了自建实例间的数据...
标题中的“redis_mysql”暗示了我们要探讨的主题是关于Redis和MySQL两种数据库技术的结合使用或者交互。...以上就是基于“redis_mysql”主题的详细知识点解析,涵盖了从基本概念到实际应用的多个层面。
1. "MySQL数据库应用从入门到精通 第2版_13516123[试读版].pdf" - 虽然不是直接关于Redis的,但MySQL是另一种常见的数据库系统,与Redis常常一起使用,理解MySQL的基础和应用有助于更好地理解Redis在数据存储解决...
本地开发Python 3.10+Mysql 8.0+Redis 推荐最新稳定版安装依赖项pip install -r requirements.txt创建一个数据库fsm,选择utf8mb4编码安装 Redis进入后端目录cd backend创造.env文件touch .envcp .env.example .env...
这个解决方案可能是一个名为“Bifrost”的中间件,它能够有效地将数据从MySQL、MariaDB和Kafka这三种不同的数据源同步到Redis、MongoDB以及ClickHouse这些目标存储系统中。 MySQL和MariaDB是两种广泛使用的开源关系...
通过阅读"a_Redis实战.pdf",你可以深入了解Redis的实际应用场景和最佳实践,提升你的Redis技能,为你的项目带来更高的效率和可靠性。同时,书中可能还会涉及如何监控Redis、性能测试以及与其他技术(如Spring Boot...
"mysql数据同步到elasticsearch 实时同步"这部分涉及到数据的实时迁移和同步。MySQL是一种广泛使用的开源关系型数据库,而Elasticsearch则是一个高性能、分布式、全文搜索引擎,常用于大数据分析和实时搜索场景。将...