local skynet = require "skynet" local oo = require "Class" local log = require "Log" local pb = require "pb" local errorInfo = require "ErrorInfo" local dataType = require "DataType" local redisKeyUrl = require "RedisKeyUrl" local MigrateData = oo.class() function MigrateData:Init() end --迁移账号数据 function MigrateData:AccountData( account ) if skynet.server.gameConfig:IsMultiRedis() then --开启了多redis local curAccountRedis = skynet.server.redisCenter:GetAccountRedis( account ) local redisUserListKey = string.format(redisKeyUrl.AccountServerUserList , account ) --并且指定redis没有玩家数据 if not curAccountRedis:exists( redisUserListKey ) then local redisOldDb = skynet.server.redis:hgetall( redisUserListKey ) redisOldDb = redisKeyUrl:CovertTable( redisOldDb ) if redisOldDb and redisOldDb.DBIndex and redisOldDb.UserID then --原redis中有数据,需要迁移数据 local packData = skynet.server.common:PackData( redisOldDb ) curAccountRedis:hmset( redisUserListKey , table.unpack( packData )) --先统计起来,后面一起删除 local redisNeedDeleteKey = redisKeyUrl.AccountServerNeedDeleteAccountDataSet skynet.server.redis:sadd( redisNeedDeleteKey , account ) --skynet.server.redis:del( redisKey ) 暂时不用 log.info("成功迁移账号数据" , account , redisOldDb.DBIndex , redisOldDb.UserID , redisOldDb.PartnerId , redisOldDb.saveMySqlTime , redisOldDb.saveMongoTime ) end end end end --迁移个人数据 function MigrateData:DetailData( partnerId ) --迁移redis相关 if skynet.server.gameConfig:IsMultiRedis() then --开启了多redis local curPartnerRedis = skynet.server.redisCenter:GetPartnerRedis( partnerId ) --根据partnerId来获取redis索引 local redisDetailKey = string.format( redisKeyUrl.GameServerPersonalDetail , partnerId ) if not curPartnerRedis:exists( redisDetailKey ) then --获取旧redis数据 local redisOldDetail = skynet.server.redis:hgetall( redisDetailKey ) redisOldDetail = redisKeyUrl:CovertTable( redisOldDetail ) --对旧数据进行组装,然后迁移数据到新redis local packData = skynet.server.common:PackData( redisOldDetail ) if #packData > 0 then curPartnerRedis:hmset( redisDetailKey , table.unpack( packData ) ) end log.info("成功迁移个人数据" , partnerId ) end end end skynet.server.migrateData = MigrateData return MigrateData