永发信息网

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

答案:3  悬赏:0  手机版
解决时间 2021-02-15 18:24
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-02-15 09:57
redis只有一台服务器,mysql存在多个不同的主机上,数据库库名和表名表结构都是一样的,怎么才能批量同步到redis,有没有库可以用?
最佳答案
  • 五星知识达人网友:忘川信使
  • 2021-02-15 11:05
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查询代码,而且是以键值对来描述的
全部回答
  • 1楼网友:你可爱的野爹
  • 2021-02-15 12:19
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左右。
  • 2楼网友:有你哪都是故乡
  • 2021-02-15 12:08
MYSQL快速同步数据到Redis 举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中。 从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样没什么错,但是速度会非常慢。如果能够想法使得MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可以节省很多消耗和缩短时间
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯