`
konin
  • 浏览: 10262 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

MYSQL快速同步数据到Redis

阅读更多

举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中。

从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样没什么错,但是速度会非常慢。如果能够想法使得MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可以节省很多消耗和缩短时间。

Mysql数据库名称为:GAME_DB, 表结构举例:

CREATE TABLE TABLE_MISSION (
    playerId int(11) unsigned NOT NULL,
    missionList varchar(255) NOT NULL,
    PRIMARY KEY (playerId)
);

Redis中的数据结构使用哈希表:

键KEY为mission, 哈希域为mysql中对应的playerId, 哈希值为mysql中对应的missionList。 数据如下:

[root@iZ23zcsdouzZ ~]# redis-cli
127.0.0.1:6379> hget missions 36598
"{\"10001\":{\"status\":1,\"progress\":0},\"10002\":{\"status\":1,\"progress\":0},\"10003\":{\"status\":1,\"progress\":0},\"10004\":{\"status\":1,\"progress\":0}}"

快速同步方法:

新建一个后缀.sql文件:mysql2redis_mission.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,
  'missions' AS redis_key,
  playerId AS hkey,
  missionList AS hval
  FROM TABLE_MISSION
) AS t

创建shell脚本mysql2redis_mission.sh
内容:

mysql GAME_DB --skip-column-names --raw < mission.sql | redis-cli --pipe

Linux系统终端执行该shell脚本或者直接运行该系统命令,即可将mysql数据库GAME_DB的表TABLE_MISSION数据同步到redis中键missions中去。mysql2redis_mission.sql文件就是将mysql数据的输出数据格式和redis的输入数据格式协议相匹配,从而大大缩短了同步时间。

经过测试,同样一份数据通过单条取出修改数据格式同步写入到redis消耗的时间为5min, 使用上面的sql文件和shell命令,同步完数据仅耗时3s左右。

分享到:
评论

相关推荐

    mysql通过binlog同步数据到redis的方法.docx

    mysql通过binlog同步数据到redis的方法 本文档介绍了使用mysql的binlog机制同步数据到redis的方法。该方法通过模仿mysql的slave角色,从master获取数据库变化的数据,写入activeMQ,再同步到redis,实现数据同步的...

    1、mysql数据同步到redis 2、redis里面主键的设计、3、redis和数据库之间的数据同步

    1、mysql数据同步到redis 2、redis里面主键的设计、3、redis和数据库之间的数据同步 1、mysql数据同步到redis 2、redis里面主键的设计、3、redis和数据库之间的数据同步

    canal 的 mysql 与 redis/memcached/mongodb 的 nosql 数据实时同步方案

    与MySQL同步,可以满足对非结构化数据或半结构化数据的处理需求。 6. **数据同步原理**: Canal通过解析MySQL的binlog,获取到数据库的增删改查操作,然后将这些操作以事件的形式推送到目标NoSQL数据库。这种方式...

    基于SSM框架,通过spring注解的方式,实现redis的数据缓存机制,将mysql的数据缓存到redis数据库.zip

    在本项目中,当MySQL中的数据发生变化时,需要将更新同步到Redis中。这通常通过监听数据库的变更事件或者定时任务来实现。例如,可以使用Redis的发布/订阅(Pub/Sub)模式来实时推送数据变更,或者通过AOP(面向切面...

    通过Gearman来同步Mysql和Redis

    - 工作者节点负责执行具体的同步操作,即从MySQL读取最新的数据,并更新到Redis中。 4. **MySQL UDF的使用**: - 利用MySQL UDF功能扩展MySQL的功能,例如编写一个UDF用于触发同步操作。 #### 总结 通过Gearman+...

    基于FlinkSQLCDC的实时数据同步方案

    某天BI团队期望对数据库做全文索引,于是我们同时要写多一份数据到ES中,改造后一段时间,又有需求需要写入到Redis缓存中。很明显这种模式是不可持续发展的,这种双写到各个数据存储系统中可能导致不可维护和扩展,...

    大型企业如何实现MySQL到Redis的同步.docx

    实现MySQL到Redis的同步需要我们关心多种问题,包括缓存穿透、数据可靠性、实时性等问题。通过使用Redis集群、Canal、消息队列等技术,我们可以解决这些问题,并提高系统的性能和可靠性。 在本文中,我们讨论了如何...

    spring-cloud模块spring-boot微服务 mysql数据同步到elasticsearch 实时同步

    "mysql数据同步到elasticsearch 实时同步"这部分涉及到数据的实时迁移和同步。MySQL是一种广泛使用的开源关系型数据库,而Elasticsearch则是一个高性能、分布式、全文搜索引擎,常用于大数据分析和实时搜索场景。将...

    keepalived+redis&mysql主备高可用配置文件和脚本

    1. **主从复制**:Redis支持主从复制,主节点负责写操作,从节点只读,数据会实时同步到从节点。配置文件中的`redis.conf`需设置`slaveof`选项,指定主节点的IP和端口。 2. **哨兵系统(Sentinel)**:Redis Sentinel...

    mysql_udf_redis.tar.bz2

    mysql_udf_redis,将数据库中的数据同步到Redis。Redis中的数据变化同步到数据库,那么这里是将Redis做为db,而真的db,数据库只作为备份

    在SQL中操作Redis或者Redis集群,达到Redis与MySQL的数据一致性.zip

    1. 单向同步:一种常见的方法是从MySQL到Redis的单向同步,即MySQL作为主数据源,Redis作为缓存。每当MySQL中的数据发生变化时,通过触发器、中间件或专门的工具将变更同步到Redis。例如,可以使用`Redisson`库来...

    redis+mysql使用学习

    - **Write-Through**:写操作先执行MySQL,然后同步到Redis,保证数据一致性。 - **Write-Behind**(异步):写操作直接写入Redis,定期批量同步到MySQL,牺牲一定实时性换取性能提升。 5. **读写分离** - 读...

    Bifrost ---- 面向生产环境的 MySQL 同步到Redis,MongoDB,ClickHouse,MySQL等服务的异构中间件-Golang开发

    Bifrost ---- 面向生产环境的 MySQL 同步到Redis,MongoDB,ClickHouse,MySQL等服务的异构中间件 Bifrost ---- 面向生产环境的 MySQL 同步到Redis,ClickHouse等服务的异构中间件 English 漫威里的彩虹桥可以将 ...

    1、mysql数据同步到redis 2、redis里面主键的设计、3、redis和数据库之间的数据同步.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

    mysql-redis在MySQL中操作Redis.zip

    2. 数据同步:在MySQL中修改数据后,通过异步方式将更新同步到Redis,保持两者数据一致。 3. 事务处理:在某些场景下,可以使用Redis进行分布式事务处理,配合MySQL实现更复杂的业务逻辑。 三、MySQL-Redis集成实践...

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    8. **双写一致性**:Redis与MySQL之间的数据同步需要考虑一致性问题。 9. **集群模式**:Sentinel监控和自动故障恢复,Cluster实现数据分片。 10. **键槽与槽迁移**:通过一致性哈希确定Key所在的槽,迁移Key以...

    springboot-mybatis-mysql-redis demo.zip

    当需要更新数据时,可以先更新数据库,再同步更新Redis中的缓存。这种模式既利用了MySQL的持久化能力,又发挥了Redis的高速缓存特性。 六、优化与最佳实践 在整合过程中,我们需要关注性能优化和异常处理。例如,...

    mysql-2-redis-配置安装.docx

    - 插件提供了将MySQL中的数据实时同步到Redis的功能,便于利用Redis的高速缓存特性来提高应用性能。 - **使用步骤**: 1. **确保环境正确配置**: 包括MySQL、Redis的安装与配置。 2. **安装MySQL UDF for Redis...

Global site tag (gtag.js) - Google Analytics