永发信息网

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

答案:3  悬赏:0  手机版
解决时间 2021-02-15 18:24
redis只有一台服务器,mysql存在多个不同的主机上,数据库库名和表名表结构都是一样的,怎么才能批量同步到redis,有没有库可以用?
最佳答案
import redis
import time
redis = redis.Redis(host='localhost', port=6379, db=0)

s_time = time.time()
with redis.pipeline() as pipe:
    pipe.multi()
    for index,item in item in enumerate(qset):#qset是你查询出来的结果集,
key = item['id']
value = item['name']
ret = pipe.sadd(key, value)

if index % 1000 == 0:
    print "Now cnt: %d" % (i+1)
    pipe.execute()
    pipe.multi()

    print "Execute..."
    pipe.execute()

e_time = time.time()上面省略了mysql查询代码,而且是以键值对来描述的
全部回答
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快速同步数据到Redis 举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中。 从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样没什么错,但是速度会非常慢。如果能够想法使得MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可以节省很多消耗和缩短时间
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
和男朋友在一起2年了 每次他都忍住不碰我 这
北湖区郴州蜜雪冰城(中山西街店)地址在什么地
在英语实际应用中 ,想用“毕竟”这个词,应
有没有小于5g的好玩的单机游戏
遗传因子为Aa的个体自交,子代中下列哪项最有
正则表达式,仅限数字0~99且不包含00怎么写?
平安路/S105(路口)我想知道这个在什么地方
圣芙蓉足浴店地址在什么地方,想过去办事
单选题中国古代耕犁完善的标志是()A.战国铁
湖南是什么辣型是麻辣还是香辣
岳麓区长沙天之道(咸嘉湖店)地址在什么地方,
翔天广告地址有知道的么?有点事想过去
很奇怪,有些人几天不见就会忘记长什么样子,
以下条约中同时有割地、赔款、通商三项内容的
墨尔本好玩吗
推荐资讯
精锐建材地址在什么地方,想过去办事
五行桑拓木,满执位是什么意思?好不好呢?
阿吉禄怎么去啊,我要去那办事
比4.6多13.6的数是多少
公积金需要缴纳多少时间能贷款
卧龙区贰仟家物流光彩市场南阳分公司地址是什
1987属兔女跟1977年属蛇男配吗
黄光裕二次被捕了释放了吗?现在的工作是干什
戊戌变法,前四十年发生的事?
装载机去哪买?哪个牌子的装载机性价比高?凯
求 带有 山 字的 字。要很多。谢谢、
李约瑟与中国科技史的研究有何关系
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?