MYSQL快速同步数据到Redis
2017-10-18 11:29
120 查看
举例场景:存储游戏玩家的任务数据,游戏服务器启动时将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快速同步数据到Redis
- Gearman实现Mysql到Redis的数据同步
- 通过Gearman实现MySQL到Redis的数据同步(异步复制)
- redis与mysql数据同步
- 通过Gearman实现MySQL到Redis的数据同步
- redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)
- mysql数据向Redis快速导入
- 把数据库里的大表放到REDIS中(从Mysql将数据快速导入到redis中 )
- redis与mysql数据同步
- 通过Gearman实现MySQL到Redis的数据同步
- mysql数据向Redis快速导入
- redis与mysql数据同步
- 实现mysql和redis之间的触发数据同步——mysql 触发器+gearman+php.worker
- 使用canal进行mysql数据同步到Redis
- Redis详细,config配置,win和linux下怎么玩,和mysql数据同步。
- mysql数据向Redis快速导入
- 通过Gearman实现MySQL到Redis的数据同步
- redis与mysql数据同步
- redis与mysql数据同步
- 通过Gearman实现MySQL到Redis的数据同步