使用python同步mysql到redis?由于数据较多,一条一条读出来写到redis太慢,有没有可以批量 *** 作的。

使用python同步mysql到redis?由于数据较多,一条一条读出来写到redis太慢,有没有可以批量 *** 作的。,第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的控制台,推荐SQLyog,Silvermoon的数据库都是用这个导出来的。

连上你的数据库之后,在玩家帐号那个表里添加一条记录即可。(表名我忘了,好久不搞这个)

2张表关联排序,用union来做.

SELECT * FROM (SELECT id,ach,'X' AS counter,'A' AS class,date FROM tablename1 as t1 WHERE 1 UNION SELECT id,ach,counter,'B' AS class,date FROM tablename2 as t2 WHERE 1) AS tall order by date asc

建议增加条件,且为索引字段.其次查的数据量不能太大,不然临时表会占据较多的内存空间.宁可牺牲硬盘空间,也不要无谓的牺牲内存空间.

从长远角度来说,建议整合2个表.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5901992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存